Netty 的线程模型?

Johngo学长 Netty 35

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

分享本页
返回顶部