用于io绑定应用程序的多线程:好的或坏的

时间:2011-10-25 21:22:52

标签: multithreading ipad io pthreads

我一直试图弄清楚io绑定应用程序中的多线程是否会真正提高性能或降低性能。我读过的许多资料都是相互矛盾的。

以此为例。

Why multithreading with io-bound is bad

接受的答案是,如果您的应用程序是io-bound,那么多线程会导致争用并减慢您的应用程序。

在这个例子中,具有最高票数的答案表明它可以提高吞吐量。

Why multithreading with io-bound is good

我在这里误解了什么吗?

在我的情况下,我需要从n个磁盘位置读取n次。我发现很难决定我是否应该使用线程。

例如,如果我在磁盘上有20个文件,并且在等待和唤醒状态下从磁盘读取20个单独的线程,这是否会完全降低我的系统速度? 如果pthread正在执行从磁盘读取的代码,是否会阻止在不同文件上执行相同操作的所有其他19个线程?

3 个答案:

答案 0 :(得分:1)

为什么你需要多线程?如果使用单个磁盘,多线程将在最佳情况下提供相同的性能,否则将提供相同的性能。

答案 1 :(得分:1)

在这个问题中:

Does it make sense to spawn more than one thread per processor?

你标记为“为什么多线程与io-bound是好的”,最佳答案有16个upvotes,他说“如果你的软件经常使用磁盘或网络IO”。特别注意最后一部分“网络IO”。这是与您的第一个链接问题的区别因素,该问题仅与线程和磁盘IO有关。

答案 2 :(得分:0)

其他线程在io-bound情况下提供帮助的唯一方法是,您的存储系统可以并行处理多个请求。高端存储阵列可能就是这种情况,但在ipad等消费类设备上不太可能出现这种情况。