![フォルダーの削除が並列化されないのはなぜですか?](https://rvso.com/image/1642397/%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%81%AE%E5%89%8A%E9%99%A4%E3%81%8C%E4%B8%A6%E5%88%97%E5%8C%96%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
答え1
現代のファイルシステムは、書き込み中に常にデータの整合性が維持されるように努めます。以前は、書き込みが正常に完了するか、まったく完了しないかのどちらかであるという意味で、これを「アトミック」書き込みと呼んでいたのを聞いたことがあります。
ディスク キューとキャッシュを無視して、実際のディスクに一度に送信できるコマンドは 1 つだけです。削除操作では、ディレクトリ ツリーから項目を削除してスペースを空きとしてマークする最終書き込みの前に、複数の読み取り (ディレクトリのスキャンなど) などが発生します。
最新のジャーナリングの使用 (これにより、ディスク タスクが中断されたタイミングに応じて、タスクを前後にロールバックできます) と組み合わせると、ボトルネックは、ディスク コントローラーのタスク (読み取り/シーク/書き込み) を実際にキューに入れることにある可能性があります。
何かをごみ箱に移動することは、単にフォルダを移動するだけであり、大量のデータを不要としてマークするのではなく、単にフォルダ構造を修正するだけなので、何かを「削除」するために行う作業ははるかに少なくなります。ただし、ごみ箱を空にすると、再びディスク領域を解放する作業に戻ることになります。
答え2
この操作は CPU ではなくディスクによってボトルネックになります。ディスクが変更を保存できる速度よりも CPU を高速化することはできません。そのため、CPU はディスクがジョブを完了するまで待機してから、さらに作業を送信します。
この影響は、多数の小さなファイルを操作する場合に特に大きくなります。この場合、ファイルシステムのオーバーヘッドはファイル自体のサイズよりも大きいため、処理に異常に長い時間がかかるように見えます。