一个故事解释清楚 Linux epoll 和 Windows IOCP 的区别

227次阅读  |  发布于3月以前

Linux 的 epoll 和 Windows 的 IOCP 都用于处理多个 IO 操作,以提高应用程序在执行 IO 操作时的效率和响应能力的。它们之间有什么区别?看到一个很好的比喻可以清晰地展示这两种技术之间的差异:

Linux 的 epoll 打印店:

  1. 提交打印请求:您准备好文档并来到打印店(Linux 系统)。在前台,您提交您的打印请求,并告知店员,一旦打印机空闲,请通知我。
  2. 取号等候:店员给您一个号码手牌(文件描述符)。您可以回到您的座位继续工作或阅读(处理其他任务),不必在打印机前等待。
  3. 打印机就绪通知:当轮到您的文档打印时,店员(epoll)会发出通知,你的手牌会响。您随即前往打印机,亲自启动打印过程。
  4. 取回文档:打印完成后,您取回您的文档。虽然您不需要一直在打印机前等待,但您需要亲自处理打印过程。

这个过程节省了您在打印机前等待的时间,但您仍然需要亲自进行打印操作。

Windows 的 IOCP 打印店:

  1. 提交打印请求:您带着文档来到打印店(Windows 系统)。在前台,您提交您的打印请求,并告诉店员,当我的文档打印好了,请通知我。
  2. 无需等待:店员接收您的文档,并告诉您可以自由做其他事情(执行其他任务)。您不需要在打印区域等待。
  3. 店员打印处理:当轮到您的文档时,店员(操作系统)不仅通知您,同时还为您完成了整个打印过程。
  4. 直接取文档:打印完成后,您只需回到前台取回已经打印好的文档。这个过程中,您完全无需参与打印操作。

这个打印店不仅节省了您的等待时间,还节省了您处理打印操作的时间,提供了一个完全异步的体验。

总结

从用户的角度看,IOCP 提供了真正的异步 IO,因为 IO 操作是在后台进行的,应用程序的线程在等待完成通知时不会阻塞在特定的IO操作上。

epoll 虽然高效,但本质上是非阻塞 IO 的一种高级形式,而不是真正的异步 IO。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8