从性能角度来看,哪个更好?select/poll还是异步I/O?我的早期印象是,select/poll会反复向内核请求数据,而异步I/O则依赖于内核通知数据可用。然而,我注意到select/poll也依赖于内核通知。因此,我认为从性能角度来看,它们都是相同的。唯一的区别是select/poll会阻塞,而异步I/O不会。我是正确的,还是有什么我忽略了的东西?
从性能角度来看,哪个更好?select/poll还是异步I/O?我的早期印象是,select/poll会反复向内核请求数据,而异步I/O则依赖于内核通知数据可用。然而,我注意到select/poll也依赖于内核通知。因此,我认为从性能角度来看,它们都是相同的。唯一的区别是select/poll会阻塞,而异步I/O不会。我是正确的,还是有什么我忽略了的东西?
通过在Linux上使用LibAIO(异步I/O库)以及在Windows上使用IOCP(input/output completion ports,输入/输出完成端口),可以实现真正的异步I/O。据我所知,它们不会阻塞调用者进程/线程的用户空间,并允许真正的重叠I/O。
这意味着异步非阻塞I/O(LibAIO和IOCP)更快,因为它们不会阻塞调用线程,并允许真正的重叠I/O。虽然和还存在其他特定问题,因此无法很好地扩展。
希望能对您有所帮助。(我也是个新手 :))
使用异步 I/O,您必须连续循环并定期检查是否有新数据可读。这使其对 CPU 密集型。选择/轮询仅阻塞,不占用 CPU 功率。它不会在内部循环。