Netty由浅到深_第二章_NIO模型简单介绍

I/O模型基本说明

  1. Java NIO全称java non-blocking IO。从JDK1.4开始,java提供一系列改进的输入/输出的新特性,被统称为NIO(New IO),是同步非阻塞的。
  2. NIO相关类都被放在java.nio包及子包下,并且对原java.io包中的很多类进行改写
  3. NIO有三大核心部分:Channel(通道)Buffer(缓冲区)Selector(选择器)
  4. NIO是面向缓冲区,或者面向块编程的。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区前后移动,这就增加了处理过程中的灵活性,使用它可以提供非阻塞式的高伸缩性网络
  5. java NIO的非阻塞模式。一个线程从某通道发送请求或者读取数据,如果目前没有数据可用,就什么都不会获取,而不是保持线程阻塞,所以直至数据变得可以读取之前,该线程可以继续做其他的事情。非阻塞写也是如此,一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情
  6. 通俗理解:NIO是可以做到一个线程处理多个操作。假设10000个请求过来,根据实际情况,可以分配50或者100个线程来处理。不像之前的阻塞IO那样,非得分配1000个
  7. HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,并且并发请求的数量比HTTP1.0大了好几个数量级

NIO和BIO的比较

  1. BIO以流的方式处理数据,而NIO以块的方式处理数据,块I/O的效率比流I/O高很多
  2. BIO是阻塞的,NIO是非阻塞的
  3. BIO基于字节流和字符流进行操作,而NIO基于Channel(通道)和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写道通道中Selector(选择器)用于监听多个通道的事件(比如:连接请求,数据到达等),因此使用单线程就可以监听多个客户端通道
亲!记得观看下一篇文章(链接更新后附)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章