文章目录

  1. 1. 基于主从Reactor多线程模型
  2. 2. 尽量不要在ChannelHandler中启动用户线程
  3. 3. 解码要放在NIO线程调用的解码Handler中进行
  4. 4. 复杂业务不要在NIO线程上完成
  5. 5. 推荐的线程数
    1. 5.1. 方案一
    2. 5.2. 方案二

本文是《Netty 权威指南》的摘要和读后感,收获颇深,整理成文。

基于主从Reactor多线程模型

基于主从Reactor多线程模型,创建两个NioEventLoopGroup,用于逻辑隔离NIO Acceptor的NIO I/O线程。

尽量不要在ChannelHandler中启动用户线程

尽量不要在ChannelHandler中启动用户线程,解码后用于将POJO消息派发到后端业务线程的除外。

解码要放在NIO线程调用的解码Handler中进行

解码要放在NIO线程调用的解码Handler中进行,不要切换到用户线程中完成消息的解码。

复杂业务不要在NIO线程上完成

如果业务逻辑处理复杂,不要在NIO线程上完成,建议将解码后的POJO消息成Task,派发到业务线程执行,以保证NIO线程尽快被释放,处理其他的I/O操作。

推荐的线程数

方案一

线程数量 = (线程总时间 / 瓶颈资源时间) x 瓶颈资源的线程并行数

方案二

QPS = 1000 / 线程总时间 x 线程数

(完)

微信公众号

文章目录

  1. 1. 基于主从Reactor多线程模型
  2. 2. 尽量不要在ChannelHandler中启动用户线程
  3. 3. 解码要放在NIO线程调用的解码Handler中进行
  4. 4. 复杂业务不要在NIO线程上完成
  5. 5. 推荐的线程数
    1. 5.1. 方案一
    2. 5.2. 方案二