怎样理解IO多路复用?
越来越感觉我是入错行了……
看过无数篇讲解IO多路复用的文章,大抵分为两种:
0.一开始就抛出几个抽象的概念,然后一顿讲解;
1.举几个特别生动的例子,很好理解,但是回到现实,还是不懂什么叫多路复用
有没有从具象到抽象的讲解(一定要先具象到实际应用中,毕竟一个复杂的系统或协议,不论内部实现多么抽象,最开始也是要基于具体的实际需求来设计吧)。就拿redis来说,现有两个顺序执行的incrby命令(假设每个命令内部都有3个IO操作:A,B,C),下面哪种猜测更接近实际情况?还是说都是在扯淡。
0.每个命令的执行,通过调度其内部的IO操作,尽量减少系统资源闲置的时间,从而最终使命令更快地执行,比如这里的IO顺序可能是:A1,C1,B1,A2,C2,B2;
1.在执行当前命令的时候,提前执行了下一个命令的部分IO操作,比如第一个incrby的A操作刚被执行完,然后立刻去执行第二个incrby的A操作(如果这样做可以更快的话),那么此时的IO顺序可以是:A1,A2,B1,B2,C1,C2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
所以,你去尝试不用多路复用去实现一个别人演示多路复用的小例子嘛。
讲下我的理解。
多路复用
这个词多出现在网络编程,首先理解多路
.多路
:有多个客户端连接,一路就是一个连接复用
:一个进程或线程处理上面所有的连接。如果不复用又需要同时服务多个客户端,需要多线程或多进程,这个就不是复用了IO多路复用
本身就是一个极具专业性的抽象概念。IO多路复用
的概念是Reactor/Preactor模型中才会有的概念.其意义在于一下几点:
给你一个简单的例子: 有A、B、C三个小伙伴去买咖啡, 但是店员只有一个需要同时服务三个人.
那么IO多路复用与之有什么关系呢?
上述步奏会一直在3与4之间徘徊, 直到客人离开就会到达第5步.
IO多路复用的优势在于店员在回答问题的时候会有思考的时间, 并且这个时间会随着问题点难度增加. (CPU密集型计算)
这时候就需要将事件先保存起来, 先回答其它客人简单的问题. 因为这不消耗多少时间 (IO阻塞的IO密集型操作). 最后再来解决困难的问题.
这个动作不一定会立刻执行完毕, 这种没有立马执行完毕就能处理其它文件描述符请求的行为. 我们称之为IO多路复用.