select/poll与异步I/O的性能比较

4

从性能角度来看,哪个更好?select/poll还是异步I/O?我的早期印象是,select/poll会反复向内核请求数据,而异步I/O则依赖于内核通知数据可用。然而,我注意到select/poll也依赖于内核通知。因此,我认为从性能角度来看,它们都是相同的。唯一的区别是select/poll会阻塞,而异步I/O不会。我是正确的,还是有什么我忽略了的东西?

2个回答

6
和的缺点在于,它们一旦被调用就会阻塞,因为系统调用处理程序运行在内核空间。

通过在Linux上使用LibAIO(异步I/O库)以及在Windows上使用IOCP(input/output completion ports,输入/输出完成端口),可以实现真正的异步I/O。据我所知,它们不会阻塞调用者进程/线程的用户空间,并允许真正的重叠I/O。

这意味着异步非阻塞I/O(LibAIO和IOCP)更快,因为它们不会阻塞调用线程,并允许真正的重叠I/O。虽然和还存在其他特定问题,因此无法很好地扩展。

希望能对您有所帮助。(我也是个新手 :))


-2

使用异步 I/O,您必须连续循环并定期检查是否有新数据可读。这使其对 CPU 密集型。选择/轮询仅阻塞,不占用 CPU 功率。它不会在内部循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接