我读到过select和多线程编程是低性能的IO模型,例如这个IBM developerworks article on high perfomance IO。
我不明白同步/同步:阻塞/非阻塞是如何提高性能的。为什么AIO是这里的最佳选择?
发布于 2012-01-04 17:53:51
异步和/或非阻塞不会为系统中的单个IO操作提供任何固有的速度提升,如果从磁盘读取数据需要x毫秒,那么就需要x毫秒。
通过允许IO操作与执行的主线程有效地分离,这些方法的优势在多线程环境中是真实的(或者即使IO延迟也可以继续操作的环境)。由此感受到的性能提升是由于用于等待IO返回或解除阻塞的资源数量减少了。
在这个thread中可以很好地比较异步和非阻塞。
发布于 2012-01-04 18:48:08
如果进程可以做其他事情,那么在等待单个IO完成的同时阻塞整个进程是没有效率的。AIO是允许进程在系统为其执行IO时执行其他操作的一种方法;多线程是另一种方法。使用多线程和使用AIO之间的差异很大程度上取决于设计;例如,在典型的服务器中,使用多线程要容易得多,并且在性能上应该没有太大差异。对于其他应用程序,AIO可能更简单和/或提供更高的性能。这是另一个需要考虑的工具,但它并不适用于所有地方。
发布于 2012-01-04 17:46:23
在线程化环境中,单个线程阻塞的时间过长是不好的,因为这会阻止其他线程进行工作。为了防止这种情况,使用了异步非阻塞IO。一个通用库是Boost.Asio。
https://stackoverflow.com/questions/8724755
复制相似问题