Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 使用多线程处理硬盘上的文件有用吗?_Multithreading - Fatal编程技术网

Multithreading 使用多线程处理硬盘上的文件有用吗?

Multithreading 使用多线程处理硬盘上的文件有用吗?,multithreading,Multithreading,在性能和执行速度方面,使用多线程处理硬盘上的文件很有用?(将文件从一个磁盘移动到另一个磁盘或检查文件的完整性) 我认为主要是我的硬盘速度决定了我治疗的速度。也许你主要关心的应该是代码的可维护性。在我看来,线程技术帮助很大,因为它不允许单线程技术所允许的那种黑客行为。多线程技术至少有时会有所帮助。原因是,如果您正在向“普通”硬盘驱动器(例如,非固态驱动器)写入数据,那么速度最慢的是硬盘驱动器的寻道时间(即硬盘驱动器将读/写磁头从磁盘半径的一段距离重新定位到另一段距离所需的时间)。与系统的其他部分相

在性能和执行速度方面,使用多线程处理硬盘上的文件很有用?(将文件从一个磁盘移动到另一个磁盘或检查文件的完整性)


我认为主要是我的硬盘速度决定了我治疗的速度。

也许你主要关心的应该是代码的可维护性。在我看来,线程技术帮助很大,因为它不允许单线程技术所允许的那种黑客行为。

多线程技术至少有时会有所帮助。原因是,如果您正在向“普通”硬盘驱动器(例如,非固态驱动器)写入数据,那么速度最慢的是硬盘驱动器的寻道时间(即硬盘驱动器将读/写磁头从磁盘半径的一段距离重新定位到另一段距离所需的时间)。与系统的其他部分相比,这种移动速度极其缓慢,头部寻找的时间与它必须移动的距离成正比。例如,最坏的情况是每次操作后磁头必须从磁盘边缘移动到磁盘中心

当然,理想的解决方案是让磁头从不查找,或者只查找很少的磁盘,如果您可以安排它,使您的程序只需要按顺序读/写单个文件,这将是最快的。或者更好的是,切换到SSD,其中没有磁盘头,寻道时间实际上为零。:)

但有时您需要您的驱动器能够并行地读/写多个文件,在这种情况下,驱动器头(必然)会来回寻找很多文件。那么,在这种情况下,多线程有什么帮助呢?答案是:有了足够智能的磁盘I/O子系统(例如SCSI,我不确定IDE是否能做到这一点),I/O逻辑将维护一个队列,其中包含所有当前未完成的读/写请求,它将动态地重新排序该队列,以便以使读/写头的行程量最小化的顺序完成请求。这被称为,因为它类似于电梯在给定时间段内最大限度地运送人数的逻辑

当然,操作系统的I/O子系统只有在事先知道哪些I/O请求挂起时才能实现这种优化。。。如果只有一个线程启动I/O请求,那么I/O子系统将只知道当前请求。(也就是说,它不能“窥视”线程的用户请求队列以查看线程下一步需要什么)。当然,您的userland线程不知道磁盘布局的细节,因此很难(不可能?)在用户空间中实现电梯算法


但是,如果您的程序有N个线程一次读/写磁盘,那么操作系统的I/O子系统将一次感知多达N个I/O请求,并可以根据需要重新排序这些请求,以最大限度地提高磁盘性能。

这不取决于HDD技术吗?一个老式的硬盘驱动器肯定会受到并行性的影响,但SSD驱动器可能不会。多线程几乎唯一有意义的时候是,如果你有一个线程专用于几个物理上独立的驱动器中的每一个。除此之外,除非您对数据进行认真的计算,否则您是对的:多个线程将一无所获,并且可能会损失很多。