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

2024-05-18 12:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

想象一下在存储设备(HDD、SSD、DVD等)上做一个简单的^{}。任务是将所有文件名索引到一个索引文件中。我们正在进行自上而下的巡查,我相信,可以并行进行,以提高绩效。This thread discusses the same issue,但使用多线程而不是多处理。在

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

看看这个目录树:

enter image description here

如果我从project文件夹开始,并进行两个进程来遍历每个子文件夹,则其中一个进程将在遍历sec1文件夹后停止。它只是一个空文件夹,而另一个文件夹已严重分支。这一点好处也没有。有什么方法可以克服磁盘I/O多处理的问题吗。你能用一个可测试的示例代码来说明吗?在


Tags: 文件the目录文件夹进程文件名分支this
1条回答
网友
1楼 · 发布于 2024-05-18 12:24:22

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

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

假设您有一台功率最大的超千兆兆瓦赫兹16-CPU计算机,而且{}已经针对多处理器进行了增强。在

现在您将一个5400rpm 1TB硬盘通过USB连接到这个设备上,然后进行漫游。在

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

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

相关问题 更多 >

    热门问题