IO多路复用

Posted lankerenf3039

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO多路复用相关的知识,希望对你有一定的参考价值。

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多路复用的主要内容,如果未能解决你的问题,请参考以下文章

非阻塞套接字与IO多路复用

IO多路复用/基于IO多路复用+socket实现并发请求/协程

IO多路复用, 基于IO多路复用+socket实现并发请求(一个线程100个请求), 协程

NIO和IO多路复用

io多路复用简介

io多路复用简介