为什么多线程文件传输可以提高性能?

Hei*_*nzi 16 hardware performance multithreading

RichCopy,一种比微软更好的robocopy-with-GUI工具,似乎是当前复制文件的首选工具.在介绍该工具TechNet文章中,其中一个主要功能是它并行复制多个文件.在默认设置中,同时复制三个文件,您可以在GUI中很好地看到:[进度:文件A的xx%,文件B的yy%,...].有很多博客 条目赞美这个工具并声称这加快了复制过程.

我的问题是:为什么这种技术可以提高性能?据我所知,在现代计算机系统上复制文件时,硬盘是瓶颈,而不是CPU或网络.我的假设是一次复制多个文件会使整个过程变慢,因为HDD需要在不同文件之间来回跳转,而不是只是顺序地传输一个文件.由于RichCopy的更快的,必须有我的假设一些错误...

Ant*_*nes 9

该工具正在对硬件进行改进,可以更好地优化多个读写请求.

当一次复制一个文件时,硬件不会知道当前正在读头(或附近)传递的数据块将需要一个后续读取,因为软件还没有排队该请求.

这些天的单个文件复制对于现代磁盘子系统来说不是非常繁重的任务.通过为这些硬件系统提供更多工作,该工具可以利用其改进的优化功能.


Mar*_*rkR 5

一个天真的"复制多个文件"应用程序将复制一个文件,然后在复制下一个文件之前等待它完成.

这意味着单个文件的复制速度不能超过网络延迟,即使它是空的(0字节).因为它可能会进行多次文件服务器调用(打开,写入,关闭),这可能是几个延迟.

要有效地复制文件,您希望拥有一个使用具有流水线技术的理智协议的服务器和客户端; 也就是说 - 客户端不会在发送下一个文件之前等待保存第一个文件,实际上,几个或多个文件可能同时"在线上".

当然要做到这一点需要自定义服务器而不是SMB(或类似)文件服务器.例如,rsync执行此操作,并且非常擅长复制大量文件,尽管是单线程的.

所以我的猜测是多线程有帮助,因为它是一个解决方案,因为服务器不支持在单个会话上进行流水线操作.

在我看来,使用合理协议的单线程实现最好.