![为什么在 robocopy 中使用 /mt 开关会导致其在启动之前暂停?](https://linux22.com/image/1539950/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%20robocopy%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20%2Fmt%20%E5%BC%80%E5%85%B3%E4%BC%9A%E5%AF%BC%E8%87%B4%E5%85%B6%E5%9C%A8%E5%90%AF%E5%8A%A8%E4%B9%8B%E5%89%8D%E6%9A%82%E5%81%9C%EF%BC%9F.png)
今天,我了解到你可以使用/公吨切换机器人复制使文件传输更快。我尝试了几个不同的选项/公吨:#,包括 1、8、17、30 和 32。我发现无论出于什么原因,8(默认值)似乎是最快的。
我相信/MT:1与不使用相同/公吨完全没有。但当我不使用/公吨,文件传输立即开始,我可以立即看到文本滚动。如果我使用 /mt 开关,无论我是否在其后放置数字,以及如果我放置数字,无论我使用什么数字,robocopy 都会被调用,并在批处理文件中显示 robocopy 语句大约 5-10 秒,然后执行(这时我终于看到文本滚动显示文件传输)。
我最初以为使用 /mt 开关意味着批处理文件在等待某些多线程服务或其他东西时会挂起几秒钟。但我尝试了 /mt:1,这应该与不使用它相同,并且它会像我指定任何其他数字时一样挂起。只有在完全不使用 /mt 开关时它才会立即开始文件传输。
显然,我使用 /mt 来加快脚本的运行速度。它只需要大约 20-30 秒,具体取决于是否使用 /mt 以及我使用的数字,因此每一秒都对加快运行速度至关重要。我如何消除使用 /mt 造成的延迟?按下space或ENTER不执行任何操作。
以下是正在使用的内容:
robocopy "H:\LOS\DefaultCitrix\ChromeCitrix" "%userprofile%\Documents\ChromeCitrix" /e /w:1 /r:4 /mt:8
答案1
一般来说,当某件事变成多线程时,一部分工作会交给每个线程。如果应用程序想要显示进度,它必须从每个线程收集状态并显示给您。细节越精细,过程就越复杂,而且进行所有这些线程间通信实际上对速度没有任何好处。
相反,在单线程应用程序中,工作可以随时转储到控制台。
为了简单起见,线程可能仅在完成一组工作时才向用户界面报告。