NIO高并发基础
NIO高并发
是jdk1.4出现的新的流.
NIO - New IO - 同步式非阻塞式IO
BIO - Blocking IO - 同步式阻塞式IO ---UDP/TCP
==AIO - AsynchronousIO - 异步式非阻塞IO - jdk1.8==
BIO的缺点
1.会产生阻塞行为 --- receive/accept/connect/read/write
2.一对一的连接:每连接一个客户端,在服务器端就要开启一个线程去处理请求.在客户端较多的情况下,服务器端就会产生大量的线程 - 耗费内存
3.建立连接之后如果不发生任何操作,那么就会导致服务器中的这个线程依然被占用,耗费服务器资源
4.无法实现定点操作
NIO組件
三个基本组件
-Buffer 缓冲区
-Channel 通道
-Selector 多路复用选择器
Buffer-缓冲区
容器 - 存储数据 - 在底层存储数据的时候实际上是以数组形式来存储的
capacity - 容量位 - 指定缓冲区的容量
limit - 限制位 - 限制操作位所能达到的尺度
position - 操作位 - 指定要操作的位置
mark - 标记位 - 标记位置,认为标记位置之前的数据是已经操作过的没有错误的数据
mark<=position<=limit<=capacity
flip - 反转缓冲区:先将限制位挪到操作位上,然后将操作位归0,清空标记位
clear - 清空缓冲区:将操作位归零,将limit挪到capacity,将标记位清空
reset - 重置缓冲区:将操作位挪到标记位
rewind - 重绕缓冲区:将操作位归零,将标记位清空 --- 缓冲区多次读取
Channel - 通道
传输数据,是面向缓冲区的.在java中,Channel默认也是阻塞的,需要手动将其设置为非阻塞模式
NIO:FileChannel UDP-DatagramChannel TCP-SocketChannel ServerSocketChannel
-FileChannel:操作文件,可以利用通道实现相同平台之间的零拷贝技术
Select - 多路复用选择器
进行选择 - 是面向通道进行操作.要求通道在使用的时候必须设置为非阻塞
-客户端:可连接 可读 可写
-服务端:可接受 可读 可写
通过Selector可以实现利用同一个服务器来处理多个客户端的数据---可以用少量的线程处理大量的请求 -- 在底层处理的时候实际上依然是同步的
NIO的优势
1.非阻塞:提高传输效率
2.一对多的连接:可以用一个或者少量的服务器中的线程来处理大量的请求,从而节省服务器的资源
3.即使已经建立连接,只要没有对应的读写事件,那么依然不能够使用服务器来处理
4.利用通道实现数据的双向传输
5.因为利用缓冲区来存储数据,所以可以对缓冲区中的数据实现定点操作
NIO高并发基础的更多相关文章
- JAVA的高并发基础认知 二
一.JAVA高级并发 1.5JDK之后引入高级并发特性,大多数的特性在java.util.concurrent 包中,是专门用于多线程发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发 ...
- JAVA的高并发基础认知 一
一.多线程的基本知识 1.1进程与线程的介绍 程序运行时在内存中分配自己独立的运行空间,就是进程 线程:它是位于进程中,负责当前进程中的某个具备独立运行资格的空间. 进程是负责整个程序的运行,而线程是 ...
- 《Netty Zookeeper Redis 高并发实战》 图书简介
<Netty Zookeeper Redis 高并发实战> 图书简介 本书为 高并发社群 -- 疯狂创客圈 倾力编著, 高度剖析底层原理,深度解读面试难题 疯狂创客圈 Java 高并发[ ...
- Springcloud 微服务 高并发(实战1):第1版秒杀
疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列之15 [博客园总入口 ] 前言 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版 ...
- 尼恩 Java高并发三部曲 [官方]
高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三部曲 > 面试必备 + 大厂必备 + 涨薪 ...
- 高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)
高吞吐高并发Java NIO服务的架构(NIO架构及应用之一) http://maoyidao.iteye.com/blog/1149015 Java NIO成功的应用在了各种分布式.即时通信和中 ...
- Java异步NIO框架Netty实现高性能高并发
原文地址:http://blog.csdn.net/opengl_es/article/details/40979371?utm_source=tuicool&utm_medium=refer ...
- java的高并发IO原理,阻塞BIO同步非阻塞NIO,异步非阻塞AIO
原文地址: IO读写的基础原理 大家知道,用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用.在不同的操作系统中,IO读写的系统调用的名称可能不完 ...
- PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类
一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...
随机推荐
- POJ P1741 Tree 解题报告
Description Give a tree with n vertices,each edge has a length(positive integer less than 1001). Def ...
- 精选10款HTML5手机模板
1.Stroller | Mobile & Tablet Responsive Template 演示地址 购买地址 2.Ocean Mobile Template 演示地址 购买地址 ...
- CSS选择器:#id和.class中间有空格和无空格的区别
相信大家都知道 .class1 .class2 和 .class1.class2 是两种不同的选择规则,但具体怎样不同呢? 首先中间有空格的情况:是选择到.class1类下的.class2类子节点,即 ...
- laravel开发之-安装汉化语言包
第一种方法: 1.输入命令:composer require "overtrue/laravel-lang:dev-master" 2.将config/app.php中命令“Ill ...
- 国内外有名的java论坛
国内: www.chinajavaworld.com-论坛人很多,高手也多,不过好像都在潜水 www.cn-java.com -也很不错,文章很好,但是就是商业性浓了点. www ...
- bootstrap 的模态框的宽与高设置
1,改变bootstrap 的宽与高, 将style=“height:900px”放在<div class = "modal-dialog">或者更外层上,整个模态框的 ...
- 地图的平移、缩放的实现(android版)
一.平移地图 移动地图的原理是利用手指在屏幕上拖动的距离,转换为在地图上距离,把地图坐标加上偏移的距离实现地图移动. 由于地图是绘制到Bitmap上的,所以地图移动和缩放的过程只要改变Bitmap的矩 ...
- Python 词频统计
利用Python做一个词频统计 GitHub地址:FightingBob [Give me a star , thanks.] 词频统计 对纯英语的文本文件[Eg: 瓦尔登湖(英文版).txt]的英文 ...
- 用CALayer实现下载进度条控件
用CALayer实现下载进度条 效果: 源码: // // ViewController.m // ProgressView // // Created by YouXianMing on 14/11 ...
- 《C++ Primer Plus》读书笔记之四—分支语句和逻辑操作符
第六章 分支语句和逻辑操作符 1.&&的优先级低于关系操作符. 2.取值范围:取值范围的每一部分都使用AND操作符将两个完整的关系表达式组合起来: if(age>17&& ...