永发信息网

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

答案:1  悬赏:50  手机版
解决时间 2021-03-31 20:28
为什么建议Netty的I/O线程与业务线程分离
最佳答案
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。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
STM8L的TIM2捕获的问题
1974年出生的可以收1995年出生的为干女吗
江门胜利大桥建于哪一年?
matlab怎么将循环变量作为函数的输入值
lineupeveryone怎么读
谁能帮助我,我恐惧症,跪求了痛苦
告便 的 拼音 是
谁知道合肥的习俗是什么?合肥结婚需要什么?
1980年1毛纸币值多少钱
甘肃省五千名特岗什么时间报名以及报名地点?
我是A1A2的驾驶证被扣12分,降级保留什么证?
律师需要干部身份吗?
苹果电脑怎么登陆id
商用冰箱商厨冷藏调几度?
中国最早的韵书是什么?
推荐资讯
合肥市58同城速运怎么样,加入后有跑单吗?
天津天地通自动化设备有限公司怎么样?
rockroll是什么意思
六安美丽之家宾馆地址在什么地方,我要处理点
木瓜炖雪蛤大概多少钱
BEYOND的无事无事什么意思?
万年历查询 公元一九七六年农历4月二十四的阳
猫妈妈不带孩子怎么办
25乘16除了列坚计算还有什么计算方法
为什么要在弟弟或妹妹面前要少说废话呢?
制作魔兽地图时有个叫“刷子”的,是什么东西
为什么包子缩水了?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?