Netty-线程模型

本文最后更新于:2 年前

⼤部分⽹络框架都是基于 Reactor 模式设计开发的。

Reactor 模式基于事件驱动,采⽤多路复⽤将事件分发给相应的 Handler 处理,⾮常适合处理海量 IO 的场景。

在 Netty 主要靠 NioEventLoopGroup 线程池来实现具体的线程模型的 。

我们实现服务端的时候,⼀般会初始化两个线程组:

  1. bossGroup :接收连接。
  2. workerGroup :负责具体的处理,交由对应的 Handler 处理。

拥有一个 Acceptor 专门用来监听请求的 I/O 类型
使用专门线程池可以提高 acceptor 的并发量,并且可以将同一个 SocketChannel 放于同一个 I/O 线程处理,同一个 I/O 线程可以处理多个 SocketChannel 的 READ/WRITE 事件

线程模型:

⼀个 Acceptor 线程只负责监听客户端的连接,⼀个 NIO 线程池负责具体处理:

image-20210804202010279

从⼀个 主线程 NIO 线程池中选择⼀个线程作为 Acceptor 线程,绑定监听端⼝,接收客户端连接
的连接,其他线程负责后续的接⼊认证等⼯作。连接建⽴完成后,Sub NIO 线程池负责具体处理
I/O 读写。

image-20210804202045874