robocopy で /mt スイッチを使用すると、開始前に一時停止するのはなぜですか?

robocopy で /mt スイッチを使用すると、開始前に一時停止するのはなぜですか?

今日は、/メートル切り替えるロボコピーファイル転送を高速化するために、いくつかのオプションを試しました/mt:#1、8、17、30、32 などがあります。何らかの理由で、8 (デフォルト) が最も高速であることがわかりました。

私はそれを信じています/メートル:1使用しないのと同じ/メートルまったく使っていません。でも使わないときは/メートル、ファイル転送がすぐに始まり、テキストが瞬時にスクロールしていくのがわかります。 /mt スイッチを使用すると、その後に数字を付けたかどうかに関係なく、また付けた場合はどの数字を使用したとしても、robocopy が呼び出され、バッチ ファイル内の robocopy ステートメントが 5 〜 10 秒間表示されてから実行されます (そのときに、ファイル転送を示すテキストが流れていくのがようやくわかります)。

最初は、/mt スイッチを使用すると、バッチ ファイルがマルチスレッド サービスなどを待機している間に数秒間ハングする可能性があると考えました。しかし、/mt:1 を試してみました。これは、使用しない場合と同じはずですが、他の数値を指定した場合と同じようにハングします。ファイル転送がすぐに開始されるのは、/mt スイッチがまったく使用されていない場合のみです。

明らかに、スクリプトを高速化するために /mt を使用しています。 /mt が使用されているかどうか、および使用する数値に応じて、約 20 ~ 30 秒しかかかりません。したがって、これを高速化するには 1 秒ごとに意味があります。 /mt の使用によって発生する遅延を解消するにはどうすればよいでしょうか? 押すかspaceENTER何もしないでください。

使用されているものは次のとおりです。

robocopy "H:\LOS\DefaultCitrix\ChromeCitrix" "%userprofile%\Documents\ChromeCitrix" /e /w:1 /r:4 /mt:8

答え1

一般的に、マルチスレッド化されると、ジョブの一部が各スレッドに渡されます。アプリが進行状況を表示したい場合は、各スレッドからステータスを収集して表示する必要があります。詳細が細かくなるほど、プロセスは複雑になり、スレッド間の通信をすべて行うことは、速度の面ではあまり役に立ちません。

逆に、シングル スレッド アプリケーションでは、作業をいつでもコンソールにダンプできます。

簡単に言えば、スレッドはおそらく、作業ブロックを完了したときにのみユーザー インターフェイスにレポートを返します。

関連情報