Netty 作为异步事件驱动的网络,高性能之处主要来自于其 I/O 模型和线程处理模型,前者决定如何收发数据,后者决定如何处理数据。
I/O模型:
Netty
的
IO
线程
NioEventLoop
由于聚合了多路复用器
Selector
,可以同时并发处理成百上千个客户
端连接。当线程从某客户端
Socket
通道进行读写数据时,若没有数据可用时,该线程可以进行其他任
务。线程通常将非阻塞
IO
的空闲时间用于在其他通道上执行
IO
操作,所以单独的线程可以管理多个输
入和输出通道。由于读写操作都是非阻塞的,这就可以充分提升
IO
线程的运行效率,避免由于频繁
I/O
阻塞导致的线程挂起。一个
I/O
线程可以并发处理
N
个客户端连接和读写操作,这从根本上解决了传统
同步阻塞
I/O
一连接一线程模型,架构的性能、弹性伸缩能力和可靠性都得到了极大的提升。
线程处理模型:
![](https://i-blog.csdnimg.cn/blog_migrate/0dc53e8dbc74e922c62d6048fe9f9993.png)
Netty
主要基于主从
Reactors
多线程模型做了一定的修改,其中主从
Reactor
多线程模型有多个
Reactor
:
1
)
MainReactor
负责客户端的连接请求,并将请求转交给
SubReactor
;
2
)
SubReactor
负责相应通道的
IO
读写请求;
3
)非
IO
请求(具体逻辑处理)的任务则会直接写入队列,等待
worker threads
进行处理。
# 博学谷IT 技术支持