Aid*_*yan 33 optimization multithreading
执行多个磁盘操作时,多线程是否有帮助,阻碍或没有区别?
例如,将许多文件从一个文件夹复制到另一个文件夹时.
澄清:我理解,当执行其他操作时,并发性显然会产生影响.如果任务是打开图像文件,转换为另一种格式,然后保存,则可以与图像操作同时执行磁盘操作.我的问题是,当执行的唯一操作是磁盘操作时,是否同时排队和响应磁盘操作更好.
jri*_*sta 40
到目前为止,大多数答案都与OS调度程序有关.但是,我认为有一个更重要的因素会导致你的回答.您是在写入单个物理磁盘还是多个物理磁盘?
即使您与多个线程并行化...... IO到单个物理磁盘本质上也是一个序列化操作.每个线程都必须阻塞,等待它有机会访问磁盘.在这种情况下,多个线程可能无用......甚至可能导致争用问题.
但是,如果要将多个流写入多个物理磁盘,则同时处理它们可以提高性能.对于托管磁盘(如RAID阵列,SAN设备等)尤其如此.
我不认为这个问题与操作系统调度程序有很大关系,因为它更多地与您写入的磁盘的物理方面有关.
这取决于你对"I/O界限"的定义,但通常多线程有两个影响:
同时使用多个CPU(如果瓶颈是磁盘而不是CPU [s],这不一定有帮助)
即使在一个线程被阻塞时也使用CPU(带有另一个线程)(例如,等待I/O完成)
我不确定Konrad的答案总是正确的,但是:作为反例,如果"I/O绑定"只是意味着"一个线程花费大部分时间等待I/O完成而不是使用CPU",但并不意味着"我们已达到系统I/O带宽限制",那么具有多个线程(或异步I/O)的IMO可能会提高性能(通过启用多个并发I/O操作).