我已经读过select和多线程编程是低性能IO模型,例如IBM developerworks article on high perfomance IO。
我不明白同步/异步如何:阻塞/非阻塞正在改善性能。为什么AIO是最佳选择?
答案 0 :(得分:4)
异步和/或非阻塞不会为系统内的各个IO操作提供任何固有的速度提升,如果需要x毫秒来从磁盘读取它将采取的操作。
通过允许IO操作与主要执行线程分开,这些方法的优点在多线程环境(或操作可以继续,尽管延迟IO)的情况下也是如此。由此感知到的性能提升是由于用于简单地等待IO返回或解除阻塞的数量减少。
此thread中提供了异步和非阻止的良好比较。
答案 1 :(得分:1)
在等待单个IO完成时阻止整个进程不是 如果该过程可能正在做其他事情,则效率很高。 AIO是 一种允许进程在系统进行其他操作的方法 为它做IO;多线程是另一个。和...之间的不同 使用多个线程或使用AIO主要是设计之一;在一个 例如,典型的服务器,使用多个线程要容易得多, 并且性能应该没有太大差异。对于其他 应用程序,AIO可能更简单和/或提供更高的性能。它的 另一个需要考虑的工具,但它并不适用于所有地方。
答案 2 :(得分:0)
在线程环境中,单个线程阻塞的时间超过必要的时间是不好的,因为它会阻止其他线程执行工作。为了防止这种情况,使用了异步非阻塞IO。一个常见的库是Boost.Asio。
答案 3 :(得分:0)
考虑到这一点:当你的程序到达需要等待用户输入一些文本的点时,你有两个选择:等到他这么做,并且CPU没有同时执行任何操作,或者你可以阻止当前程序并使用CPU做其他有用的计算。用户输入后,您可以取消阻止您的程序并继续。这样可以提高性能。