Netty的线程模型

2023-05-19,,

    当我们讨论Netty线程模型的时候,一般首先会想到的是经典的Reactor线程模型,尽管不同的NIO框架对于Reactor模式的实现存在差异,但本质上还是遵循了Reactor的基础线程模型。下面浅谈一下我对Reactor线程模型的认识

    1.Reactor单线程模型,是指所有的I/O操作都在同一个NIO线程上面完成。NIO线程的职责如下

作为NIO服务端,接收客户端的TCP连接

作为NIO客户端,向服务端发起TCP连接

读取通信对端的请求或者应答消息

向通信对端发送消息请求或者应答消息

    对于小容量的应用可以用单线程,但是对于高负载、大并发的应用不适用,因为性能上无法支撑

    2.Rector多线程模型与单线程模型最大的区别就是有一组NIO线程来处理I/O操作,特点如下:

有专门一个NIO线程---Acceptor线程用于监听服务端,接收客户端的TCP连接请求

网络I/O操作--读、写等由一个NIO线程池负责,线程池可以采用标准的JDK线程池实现

一个NIO线程可以同时处理N条链路,但是一个链路只对应一个NIO线程,防止发生并发操作

大多数情况下,用多线程模型就可以满足性能需求,但是如果一个NIO线程负责监听和处理大量连接也有可能会存在性能问题。

    3.主从Reactor多线程模型

服务端用于接收客户端连接的不在是一个单独的NIO线程,而是一个独立的NIO线程池。Acceptor接收到客户端TCP连接请求并处理完成后(可能包含介入认证等),将新创建的SocketChannel注册到I/O线程池的某个I/O线程上,由它负责SocketChannel的读写和编解码工作,可以解决一个服务端监听线程性能不足的问题,因此Netty的官方demo中,推荐使用该线程模型

《Netty的线程模型.doc》

下载本文的Word格式文档,以方便收藏与打印。