永发信息网

为什么建议Netty的I/O线程与业务线程分离

答案:1  悬赏:50  手机版
解决时间 2021-03-31 20:28
  • 提问者网友:呐年旧曙光
  • 2021-03-31 04:15
为什么建议Netty的I/O线程与业务线程分离
最佳答案
  • 五星知识达人网友:风格不统一
  • 2021-03-31 04:50
Netty I/O线程和业务处理线程分离原因:

1、充分利用多核的并行处理能力:I/O线程和业务线程分离,双方可以并行的处理网络I/O和业务逻辑,充分利用多核的并行计算能力,提升性能。
2、故障隔离:后端的业务线程池处理各种类型的业务消息,有些是I/O密集型、有些是CPU密集型、有些是纯内存计算型,不同的业务处理时延,以及发生故障的概率都是不同的。如果把业务线程和I/O线程合并,就会存在如下问题:
1)某类业务处理较慢,阻塞I/O线程,导致其它处理较快的业务消息的响应无法及时发送出去。
2)即便是同类业务,如果使用同一个I/O线程同时处理业务逻辑和I/O读写,如果请求消息的业务逻辑处理较慢,同样会导致响应消息无法及时发送出去。
3、可维护性:I/O线程和业务线程分离之后,双方职责单一,有利于代码维护和问题定位。如果合设在一起,当RPC调用时延增大之后,到底是网络问题、还是I/O线程问题、还是业务逻辑问题导致的时延大,纠缠在一起,问题定位难度非常大。例如业务线程中访问缓存或者数据库偶尔时延增大,就会导致I/O线程被阻塞,时延出现毛刺,这些时延毛刺的定位,难度非常大。
4、资源代价:NioEventLoopGroup的创建并不是廉价的,它会聚合Selector,Selector本身就会消耗句柄资源。
Netty的NioEventLoop设计理念就是通过有限的I/O线程,通过多路复用和非阻塞的方式,一个线程同时处理成百上千个链路,来解决传统一连接一线程的同步阻塞模型。
因此,它的创建成本也较高,一个进程中不宜创建过多NioEventLoop。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯