2024-05-18 12:24:22 发布
网友
想象一下在存储设备(HDD、SSD、DVD等)上做一个简单的^{}。任务是将所有文件名索引到一个索引文件中。我们正在进行自上而下的巡查,我相信,可以并行进行,以提高绩效。This thread discusses the same issue,但使用多线程而不是多处理。在
然而,问题在于如何开始这样一个过程。由于目录具有树状结构,我们无法预测哪个分支会比其他分支长。在
看看这个目录树:
如果我从project文件夹开始,并进行两个进程来遍历每个子文件夹,则其中一个进程将在遍历sec1文件夹后停止。它只是一个空文件夹,而另一个文件夹已严重分支。这一点好处也没有。有什么方法可以克服磁盘I/O多处理的问题吗。你能用一个可测试的示例代码来说明吗?在
project
sec1
由于您不知道树的平衡,因此没有合理的方法在处理器之间分割任务。在
更重要的一点是,遍历I/O不是CPU限制的任务,而是I/O限制的任务。因此,增加更多的CPU马力不会对最终结果产生太大的影响。在
假设您有一台功率最大的超千兆兆瓦赫兹16-CPU计算机,而且{}已经针对多处理器进行了增强。在
现在您将一个5400rpm 1TB硬盘通过USB连接到这个设备上,然后进行漫游。在
很明显,walk只能以磁盘旋转的速度运行,因为这就是文件系统(和底层子系统)读取分区表以确定目录结构的速度。在
但是,如果您在每个文件上执行一个CPU限制的任务(例如图像处理),那么您的程序的这一部分将受益于CPU性能的提高,但它将等待启动,直到文件系统可以为它提供一些工作—现在您又回到了慢IO问题。在
由于您不知道树的平衡,因此没有合理的方法在处理器之间分割任务。在
更重要的一点是,遍历I/O不是CPU限制的任务,而是I/O限制的任务。因此,增加更多的CPU马力不会对最终结果产生太大的影响。在
假设您有一台功率最大的超千兆兆瓦赫兹16-CPU计算机,而且{}已经针对多处理器进行了增强。在
现在您将一个5400rpm 1TB硬盘通过USB连接到这个设备上,然后进行漫游。在
很明显,walk只能以磁盘旋转的速度运行,因为这就是文件系统(和底层子系统)读取分区表以确定目录结构的速度。在
但是,如果您在每个文件上执行一个CPU限制的任务(例如图像处理),那么您的程序的这一部分将受益于CPU性能的提高,但它将等待启动,直到文件系统可以为它提供一些工作—现在您又回到了慢IO问题。在
相关问题 更多 >
编程相关推荐