EventLoop&EventLoopGroup

EventLoop&EventLoopGroup

Netty的线程模型
IO线程内部进行串行操作,避免多线程竞争导致的性能问题,表面上看串行设计CPU利用率不高,并发读不够,但可以通过调整NIO线程参数,同时启动多个串行化的线程并行运行,这种局部无锁化的串行线程设计相比一个队列多个工作线程的模型性能更优。

1. 线程模型

1.1 main thread pool
1.1.1 接收客户端连接,初始化channel
1.1.2 将链路变更事件通知ChannelPipeline
1.2 sub thread pool
1.2.1 异步读取数据,发布读事件到ChannelPipeline
1.2.2 异步发送消息,调用ChannelPipeline的消息发送接口
1.2.3 执行系统调用的Task
1.2.4 执行定时任务的Task

2 最佳实践

2.1 创建两个EventLoopGroup,用于隔离NIO Acceptor和NIO IO线程
2.2 尽量别再Handler中启动用户线程,避免线程切换开销
2.3 编解码放在NIO线程调用的Handler中完成,不要切换到用户线程
2.4 业务简单,没有复杂的计算,没有导致线程阻塞的操作,尽量放在NIO线程中完成
2.5 业务处理复杂、存在复杂的计算或阻塞,在完成解码转换为Pojo后,将消息派发给业务线程池
2.6 关于IO相关的定时,使用EventLoop的调度Task
2.7 业务态的定时任务,有业务自身选择方案解决(Quartz)
wenxinzizhu wechat
扫一扫,添加我的微信,一起交流共同成长(备注为技术学习)