选择/轮询与异步 I/O 的性能

标签 performance select asynchronous io

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

最佳答案

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

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

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

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

关于选择/轮询与异步 I/O 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6354431/

相关文章:

node.js - Node js优先处理

c++ - 如何有效地将 STL 容器恢复到旧值

c - 如何实现像 memcpy() 这样的快速复制功能?

mysql - 选择最高值,或者如果共享最高值则选择值

javascript - 异步功能意外行为

iphone - 我们有什么理由不使用 UIImageView 的子类吗?

c++ - std::equal_range 的可能实现

oracle - 为什么从 Oracle 外部表返回数据这么慢?

sql - 接收错误 "Select statements included within a function cannot return data to a client"

MySQL避免重复值