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.因为利用缓冲区来存储数据,所以可以对缓冲区中的数据实现定点操作

最新文章

  1. TCP/IP、Http、Socket的区别
  2. alfresco install in linux, and integrated with tesseract ocr
  3. jQuery.cookie
  4. uva 524 prime ring problem——yhx
  5. Cocoapods注意点
  6. Mysql unix_timestamp() FROM_UNIXTIME和DATE_FORMAT(date,format)
  7. jquery find()和filter()的区别
  8. LintCode (9)Fizz Buzz
  9. 在github上搭建免费的博客
  10. 基于jquery的插件开发
  11. 不同场景下使用CSS隐藏元素
  12. 一步一步设置Joomla!开发环境
  13. 扫码下单支持同桌单人点餐FAQ
  14. 关于多线程之GCD的一些学习要点
  15. npm 是干什么的
  16. 基于alpine用dockerfile创建的爬虫Scrapy镜像
  17. POJ 1847 Tram (最短路径)
  18. DevExpress v17.2新版亮点—Analytics Dashboard篇(一)
  19. Spring3实战第一章 Aop 切面 XML配置
  20. asyncio结合线程池

热门文章

  1. C# Task.FromResult的用法
  2. 03.CSS选择器--&gt;交集并集选择器
  3. drupal7 获取当前使用的主题的名称
  4. Web前端面试指导(十八):用纯CSS创建一个三角形的原理是什么?
  5. javascript 理解继承
  6. SVN - Checksum mismatch while updating
  7. C#默认OrderBy()函数的排序问题
  8. Python3利用Dlib19.7实现摄像头人脸识别的方法
  9. zabbix监控服务器时间问题
  10. Mac OS 10.8 配置SVN服务器