怎样理解IO多路复用?

发布于 2022-09-11 20:15:38 字数 476 浏览 24 评论 0

越来越感觉我是入错行了……
看过无数篇讲解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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

揽月 2022-09-18 20:15:38

理解一样事物的最好方法就是知道没有它会多么不方便 --- 沃.兹基硕德

所以,你去尝试不用多路复用去实现一个别人演示多路复用的小例子嘛。

一场春暖 2022-09-18 20:15:38

讲下我的理解。
多路复用这个词多出现在网络编程,首先理解多路.
多路:有多个客户端连接,一路就是一个连接
复用:一个进程或线程处理上面所有的连接。如果不复用又需要同时服务多个客户端,需要多线程或多进程,这个就不是复用了

吻风 2022-09-18 20:15:38

IO多路复用本身就是一个极具专业性的抽象概念。

IO多路复用的概念是Reactor/Preactor模型中才会有的概念.

其意义在于一下几点:

  1. 提供事件注册功能(只关心感兴趣的事件).
  2. 将同步的IO操作改造成异步.

给你一个简单的例子: 有A、B、C三个小伙伴去买咖啡, 但是店员只有一个需要同时服务三个人.

那么IO多路复用与之有什么关系呢?

  1. 当A、B、C三个人进店开始的时候, 就会有门铃开始响动, 店员开始知道有人进来了.
  2. 店员开始招呼客人"欢迎光临". (注册A/B/C的文件描述符事件)
  3. A/B/C 的任何一个人开始与店员开始沟通. (写入数据到对应的文件描述符)
  4. 店员思考并且解答疑问(文件描述符事件回调, 按回调顺序进行处理回应)
  5. (A/B/C)三人离开店铺. (关闭文件描述符/注销事件)

上述步奏会一直在3与4之间徘徊, 直到客人离开就会到达第5步.

IO多路复用的优势在于店员在回答问题的时候会有思考的时间, 并且这个时间会随着问题点难度增加. (CPU密集型计算)

这时候就需要将事件先保存起来, 先回答其它客人简单的问题. 因为这不消耗多少时间 (IO阻塞的IO密集型操作). 最后再来解决困难的问题.

这个动作不一定会立刻执行完毕, 这种没有立马执行完毕就能处理其它文件描述符请求的行为. 我们称之为IO多路复用.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文