Netty的线程IO模型

Posted 小谢backup

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty的线程IO模型相关的知识,希望对你有一定的参考价值。

Netty是一个通信框架,致力于实现在不同机器上的线程通信,底层是用线程的NIO模型实现的,靠事件驱动。Netty的一个特点就是异步非阻塞IO,简称异步NIO(non-blocking IO),正因为Netty的异步NIO实现很可靠,促成了Netty在软件开发特别是分布式应用中的风靡。

那什么是异步非阻塞IO呢?这要从线程的IO模型说起。


异步阻塞IO

我们都知道,在两台不同机器上的两个线程如果要通信,就必须调用网络相关的接口,而网络IO接口就是其中之一,IO接口有不同的实现方式,大致可以分为4种:同步阻塞IO(BIO)、伪异步阻塞IO(PIO)、异步阻塞IO(NIO,虽然叫non-blockin,但实际上是阻塞的)、真正的异步非阻塞IO(AIO)

其中BIO、NIO的IO与工作线程之间的关系如下:

BIO:1连接:1线程

NIO:1条有效连接:1线程,或者说 全部连接:1个线程。


这里的有效连接是指连接中含有请求数据,而且处理连接的线程只有一个,因为在一个连接创建后,该连接(对应下图的Channel)会被注册到多路复用器Selector上。当这个Selector注册了多个连接后,它会需要监控哪个连接中当前有数据,然后就通知线程处理,此时线程与连接是一对一的。

有的观点认为NIO是异步非阻塞的,这里的非阻塞侧重在Selector对连接的调度上,因为Selector可以自主选择有数据的连接提交给工作线程,只要发现有效连接就提交给线程。而当有多个有效连接时就得"排队"了,这时候就是阻塞,即阻塞侧重在线程的处理上。因此,严格意义上来说,将NIO归类为阻塞更合适。

很显然,NIO比BIO节省了线程开销。


以上是关于Netty的线程IO模型的主要内容,如果未能解决你的问题,请参考以下文章

彻底搞懂 Netty 线程模型

netty的IO模型

netty - 线程模型 reactor

netty - 线程模型 reactor

netty学习01-IO模型

Netty 从线程模型的角度看 Netty 为什么是高性能的?