码迷,mamicode.com
首页 > 其他好文 > 详细

IO多路复用

时间:2019-12-29 18:37:30      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:逻辑   --   bsp   例子   过程   connector   线程   计时   nginx   

IO多路复用是指同一个进程(线程)处理多个IO数据流。

注意和多线程+池模型的区别,多线程+池模型是指每个线程处理一个IO数据流。

多路复用的好处是

1,不会增加新的进程(线程),减少线程创建切换的开销。

2,当处理的消耗对比IO几乎可以忽略不计时,可以处理大量的并发IO,而不用消耗太多CPU/内存。这就像是一个工作很高效的人,手上一个todo list,他高效的依次处理每个任务。这比每个任务单独安排一个人要节省(雇人是要发工资的……)。典型的例子是nginx做代理,代理的转发逻辑相对比较简单直接,那么IO多路复用很适合。相反,如果是一个做复杂计算的场景,计算本身可能是个 指数复杂度的东西,IO不是瓶颈。那么怎么充分利用CPU或者显卡的核心多干活才是关键。

3,如果做不到“处理过程相对于IO可以忽略不计”,IO多路复用的并不一定比线程池方案更好。比如一个web的服务,用jetty 9的NIO connector,后边是spring svc + JDBC连接数据库。spring svc + JDBC连接数据库这两块的处理延迟相对于NIO来说不能忽略,所以并不能指望用jetty 9的NIO connector换了之前的BIO connector的容器,性能能高不少(实际上应该会高一些,但不会太夸张,毕竟瓶颈在后边处理和DB上)。

 
-----
参考:
https://www.zhihu.com/question/306267779/answer/570147888

IO多路复用

标签:逻辑   --   bsp   例子   过程   connector   线程   计时   nginx   

原文地址:https://www.cnblogs.com/lankerenf3039/p/12115485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!