Netty之NIO核心组件

Java NIO(同步非阻塞)时jdk1.4开始的,java提供了一系列改进的输入/输出的新特性。

NIO可以做到一个线程处理多个操作,假设有10000个请求过来,分配50或者100个线程来处理。不像之前的阻塞IO那样,非得分配10000个。

HTTP2.0使用多路复用技术,做到同一个连接并发处理多个请求,且并发请求的数量比HTTP1.1高几个数量级。

NIO的核心组件:

1、通道(Channel)

Channel在NIO中是一个接口 

常用的Channel类有:FileChannel(用于文件读写),DatagramChannel(用于UDP的数据读写),ServerSocketChannel和SocketChannel(用于TCP数据读写)

2、缓冲区(Buffer)

注意:ByteBuffer支持类型化的put和get,put放入什么数据类型,get是使用相应的数据类型取出,否则可能报BufferUnderFlowException。

3、选择器(Selector)

Selector可以检测多个注册的通道上是否有事件发生,如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以只用一个线程去管理多个通道。

(1)每个channel都会对应一个buffer

(2)selector对应一个线程,一个线程对应多个channel(连接)

(3)程序切换到哪个channel是有事件(Event)决定的,selector会根据事件在各个通道上切换。

(4)buffer是一个内存块,底层是一个数组,且是双向的。

(5)channel是双向的。

发布了59 篇原创文章 · 获赞 2 · 访问量 2067

猜你喜欢

转载自blog.csdn.net/zuodaoyong/article/details/103229908