
У меня есть несколько файлов tar.gz, которые в общей сложности занимают много гигабайт в системе CentOS. Большинство файлов tar.gz на самом деле довольно маленькие, но те, что с изображениями, большие. Один — 7,7 ГБ, другой — около 4 ГБ, а пара — около 1 ГБ.
Я уже распаковал файлы один раз и теперь мне нужна вторая копия всех этих файлов.
Я предполагал, что копирование распакованных файлов будет быстрее, чем их повторная распаковка. Но я начал запускать cp -R около 10 минут назад, и пока скопировано меньше 500 МБ. Я уверен, что процесс распаковки был быстрее.
Я прав?
И если да, то почему? Кажется бессмысленным, что распаковка будет быстрее, чем простое дублирование существующих структур.
решение1
Рассмотрим два сценария:
- Для копирования необходимо прочитать весь файл с диска и записать его на диск.
- Tar-Gzip требует, чтобы вы прочитали файл меньшего размера с диска, распаковали его и записали на диск.
Если ваш процессор не нагружен процессом распаковки, то вполне логично, что операции ввода-вывода ограничиваются. По этому аргументу (и поскольку вам нужно записать одинаковое количество в обоих случаях), чтение меньшего файла (tar.gz) занимает меньше времени, чем чтение большего файла. Также экономится время, поскольку быстрее читать один файл, чем читать много маленьких файлов.
Экономия времени зависит от разницы между временем, затраченным на чтение (I/O) и распаковку (CPU). Поэтому для файлов, которые минимально сжимаемы (например, уже сжатые файлы, такие как mp3, jpg, zip и т. д.), где время, необходимое для распаковки, вероятно, будет больше времени, сэкономленного на операции чтения, распаковка будет фактически медленнее, чем копирование.
(Стоит отметить, что чем медленнее ввод-вывод, тем больше времени будет сэкономлено при использовании сжатого файла — один из таких сценариев возможен, если источник и цель операции копирования находятся на одном физическом диске.)
решение2
Чтение очень маленького файла происходит намного быстрее, чем чтение кучи больших файлов. Это обычно верно, даже если процессору приходится его распаковывать.