Netty线程模型架构!
Netty线程模型架构!
月伴飞鱼Netty 主要基于 主从
Reactors
多线程模型 做了一定的改进:
- 其中主从 Reactor 多线程模型有多个 Reactor。
Netty 抽象出两组线程池:BossGroup 和 WorkerGroup
BossGroup 专门负责接收客户端的连接。
WorkerGroup 专门负责网络的读写。
BossGroup 和 WorkerGroup 类型都是 NioEventLoopGroup
NioEventLoopGroup 相当于一个 事件循环组。
- 这个组中 含有多个事件循环 ,每一个事件循环是 NioEventLoop。
NioEventLoop 表示一个不断循环的执行处理任务的线程。
- 每个NioEventLoop 都有一个selector,用于监听绑定在其上的socket的网络通讯。
NioEventLoopGroup 可以有多个线程,即可以含有多个NioEventLoop。
每个Boss Group 中的 NioEventLoop 循环执行的步骤:
轮询accept 事件。
处理accept 事件,与client建立连接,生成 NioScocketChannel。
并将其注册 Worker Group 上的某个 NIOEventLoop 上的 selector。
处理任务队列的任务,即 runAllTasks。
每个 Worker Group 中的 NIOEventLoop 循环执行的步骤:
轮询 read/write 事件。
处理 I/O 事件,即 read/write 事件,在对应的 NioScocketChannel 上处理。
处理任务队列的任务,即 runAllTasks。
每个Worker NIOEventLoop 处理业务时,会使用 pipeline(管道)。
- pipline中包含了 channel,即通过pipline可以获取到对应的 channel。
- 并且pipline维护了很多的 handler(处理器)来对数据进行一系列的处理。
handler(处理器) 有Netty内置的,也可以自己定义。