通过多线程进行文件复制优化

Ass*_*vie 5 io optimization performance file

您可以通过多线程使文件复制更快吗?

编辑:为了澄清,假设您正在实施 CopyFile(src, tgt)。在某些情况下,您可以使用多个线程来使其运行得更快,这似乎是合乎逻辑的。

编辑一些更多的想法:

当然,这取决于相关的硬件/存储。

例如,如果您从一个磁盘复制到另一个磁盘,很明显您可以使用两个线程同时读/写,从而节省了两个线程中最快的(通常是读取)的性能成本。但是你真的不需要多个线程来并行读/写,只需要异步IO。

但是,如果 async-IO 在从不同磁盘读取/写入时确实可以加快速度(高达 2 倍),为什么这不是 CopyFile 的默认实现?(或者是吗?)

Mic*_*urr 2

您可以看到一个好处,特别是如果文件位于不同的设备上,在这种情况下,I/O 可以非常有效地重叠。

然而,在某些情况下,你很容易导致硬件崩溃,所以我认为这是一个不应该掉以轻心的优化。

至于您添加的附加问题:

但是,如果 async-IO 在从不同磁盘读取/写入时确实可以加快速度(高达 2 倍),那么为什么这不是 CopyFile 的默认实现呢?(或者是吗?)

我不知道 的内部结构CopyFile(),但如果他们出于以下几个原因不这样做,我不会感到惊讶:

  1. 如果他们要使用额外的线程(或多个线程)来实现它,这可能会对进程造成比适当的更大的干扰(特别是如果进程到目前为止是单线程的)
  2. 如果他们尝试使用单线程异步 I/O 来实现它(正如ChrisW 指出的那样),他们可能会在提高性能的同时导致系统抖动问题。笼统地确定您何时会获得好处而不是受到损害可能并不容易。

这并不是说它不能或不应该完成(或者甚至没有完成 - 我不知道) - 这些只是可能无法完成的几个可能原因。