Netty 的线程模型?

Johngo学长 Netty 38

Netty 通过 Reactor 模型基于多路复用器接收并处理用户请求,内部实现了两 个线程池,boss 线程池和 work 线程池,其中 boss 线程池的线程负责处理请 求的 accept 事件,当接收到 accept 事件的请求时,把对应的 socket 封装到 一个 NioSocketChannel 中,并交给 work 线程池,其中 work 线程池负责请 求的 read 和 write 事件,由对应的 Handler 处理。

单线程模型

所有 I/O 操作都由一个线程完成,即多路复用、事件分发和处理都是在一个 Reactor 线程上完成的。既要接收客户端的连接请求,向服务端发起连接,又要 发送/读取请求或应答/响应消息。一个 NIO 线程同时处理成百上千的链路,性 能上无法支撑,速度慢,若线程进入死循环,整个程序不可用,对于高负载、 大并发的应用场景不合适。

多线程模型

有一个 NIO 线程(Acceptor) 只负责监听服务端,接收客户端的 TCP 连接 请求;NIO 线程池负责网络 IO 的操作,即消息的读取、解码、编码和发送; 1 个 NIO 线程可以同时处理 N 条链路,但是 1 个链路只对应 1 个 NIO 线 程,这是为了防止发生并发操作问题。但在并发百万客户端连接或需要安全认 证时,一个 Acceptor 线程可能会存在性能不足问题。

主从多线程模型

Acceptor 线程用于绑定监听端口,接收客户端连接,将 SocketChannel 从 主线程池的 Reactor 线程的多路复用器上移除,重新注册到 Sub 线程池的线 程上,用于处理 I/O 的读写等操作,从而保证 mainReactor 只负责接入认 证、握手等操作。

回复

我来回复
  • 暂无回复内容

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部