【问题标题】:Performance of select/poll vs asynchronous I/O选择/轮询与异步 I/O 的性能
【发布时间】:2011-06-15 07:29:30
【问题描述】:

从性能的角度来看,哪个更好?选择/轮询还是异步 I/O?我之前的印象是 select/poll 反复向内核询问数据,而异步 I/O 依赖于内核的数据可用性通知。但是,我注意到 select/poll 也依赖于内核通知。所以,我相信从性能的角度来看,两者都是一样的。唯一的区别是选择/轮询会阻塞,而异步 I/O 不会。我是正确的还是我遗漏了什么?

【问题讨论】:

    标签: performance select asynchronous io


    【解决方案1】:

    select/poll 还依赖于准备好的文件桌面脚本的内核通知。但是 select/poll 的缺点是它们一被调用就会阻塞,因为 Systemcall-Handler 运行在内核空间中。

    真正的异步 I/O 是通过 LibAIO(Linux 上)和 Windows 上的 IOCP 实现的。据我所知,它们不会阻塞用户空间中的调用进程/线程,它们允许真正的重叠 I/O。

    这意味着异步非阻塞 I/O(LibAIO 和 IOCP)更快,因为它不会阻塞调用线程并且它们允许真正的重叠 I/O。选择/轮询也是异步的,但它们是异步阻塞的。顺便说一句,select 和 poll 还存在其他特定问题,因此它们无法很好地扩展。

    希望我能帮助你。 (我也是这方面的新手:))

    【讨论】:

      【解决方案2】:

      使用异步 I/O,您必须不断循环并检查是否有新数据要定期读取。这使它成为 CPU 密集型的。选择/轮询只是阻塞,不占用 CPU 资源。它不会在内部循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-24
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 1970-01-01
        • 2012-09-14
        相关资源
        最近更新 更多