多处理对光盘I / O有用吗?

时间:2015-08-16 03:28:57

标签: python multiprocessing

想象一下在存储设备(HDD,SSD,DVD等)上完成的简单walk。任务是将所有文件名索引到索引文件中。我们正在进行自上而下的行走,我相信这可以并行化以提高性能。 This thread discusses the same issue,但是使用多线程而不是多处理。

然而,问题在于找到如何开始这样的过程。由于目录具有树结构,我们无法预测哪个分支比其他分支更长。

看看这个目录树:

enter image description here

如果我从project文件夹开始并使两个进程遍历每个子文件夹,则其中一个进程将在遍历sec1文件夹后停止。它只是一个空文件夹,而另一个则是大量分支。这根本不是有益的。有没有办法克服光盘I / O多处理这些问题。你能用一个可测试的示例代码来说明它吗?

1 个答案:

答案 0 :(得分:2)

由于您不知道树的平衡,因此没有合理的方法在处理器之间拆分任务。

更重要的一点是,遍历I / O不是CPU绑定任务,而是I / O绑定。因此,增加更多的CPU马力不会对最终结果产生那么大的影响。

想象一下,您拥有最强大的超级giga-peta-hertz 16-CPU计算机,并且已为多处理器进一步增强walk

现在,您通过USB将5400 RPM 1TB硬盘连接到此设备,然后散步。

很明显,walk只能以磁盘可以旋转的速度行走,因为这是文件系统(和底层子系统)读取分区表以找出目录结构的速度。

但是,如果您在每个文件上执行CPU绑定任务(例如图像处理),那么程序的这一部分将受益于CPU性能的提高,但它会等待启动直到文件系统可以提供一些工作 - 现在你又回到了缓慢的IO问题。