Чому смола | смола так швидше, ніж cp?


10

Рекурсивне копіювання каталогу, використання tarдля упаковки каталогу, а потім передача даних на інший tarдля розпакування здається набагато швидшим, ніж використання cp -r(або cp -a).

Чому це? І чому не cpможна зробити швидше, зробивши це так само під кришкою?

Редагувати: Я помітив цю різницю, намагаючись скопіювати величезну структуру каталогів, яка містить десятки тисяч файлів і папок, глибоко вкладених, але загальною кількістю лише 50 Мб. Не впевнений, що це актуально.


Це одне цікаве запитання. Ви можете знайти відповіді на деякі питання тут: stackoverflow.com/questions/316078 і тут: unix.stackexchange.com/questions/66647
Тереза е Юніор

Відповіді:


6

Cpробить відкрите читання-закриття-відкриття-запис-закриття у циклі над усіма файлами. Тож читання з одного місця та запис у інше трапляються повністю переплетеними. Tar|tarчитає і записує в окремих процесах, а крім того tarвикористовує декілька потоків для читання (запису) декількох файлів "відразу", що дозволяє дисковому контролеру одночасно отримувати, зберігати та зберігати багато блоків даних. Загалом, tarдозволяє кожному компоненту ефективно працювати, одночасно cpрозбиваючи проблему на неоднорідні, неефективно невеликі шматки.


Чи можемо ми реально сказати, що це стосується всіх cpреалізацій? Звідки ми знаємо, що це правда? І чому це було cpб написано таким неефективним способом? Будь-яка реалізація копії файлу підручника читає буфер з n байтів за один раз і записує їх на диск перед читанням ще n n байтів. Але ви говорите, що cpзавжди читає весь файл, перш ніж написати цілу копію?
LarsH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.