netty 线程模型(未完成)

参考

  • Netty原理架构解析
  • netty 入门
  • netty工作原理架构图+

虽然Netty的线程模型基于主从Reactor多线程,借用了MainReactor和SubReactor的结构。但是实际实现上SubReactor和Worker线程在同一个线程池中

  1. bossGroup线程池则只是在bind某个端口后,获得其中一个线程作为MainReactor,专门处理端口的Accept事件,每个端口对应一个boss线程
  2. workerGroup线程池会被各个SubReactor和Worker线程充分利用

Server 端包含 1 个 Boss NioEventLoopGroup 和 1 个 Worker NioEventLoopGroup。

NioEventLoopGroup 相当于 1 个事件循环组,这个组里包含多个事件循环 NioEventLoop,每个 NioEventLoop 包含 1 个 Selector 和 1 个事件循环线程。

每个 Boss NioEventLoop 循环执行的任务包含 3 步:

1)轮询 Accept 事件;

2)处理 Accept I/O 事件,与 Client 建立连接,生成 NioSocketChannel,并将 NioSocketChannel 注册到某个 Worker NioEventLoop 的 Selector 上;

3)处理任务队列中的任务,runAllTasks。任务队列中的任务包括用户调用 eventloop.execute 或 schedule 执行的任务,或者其他线程提交到该 eventloop 的任务。

netty 线程模型(未完成)_第1张图片

每个 Worker NioEventLoop 循环执行的任务包含 3 步:

1)轮询 Read、Write 事件;

2)处理 I/O 事件,即 Read、Write 事件,在 NioSocketChannel 可读、可写事件发生时进行处理;

3)处理任务队列中的任务,runAllTasks。

你可能感兴趣的:(netty 线程模型(未完成))