Почему создание файла со случайным текстом занимает больше времени, чем с нулями?

cat FileName|awk -F ',' 'length($3)<=9 {print $3}'|sort -u

Мне это помогло. Где $3 — это столбец, по которому я фильтровал запись, вы можете заменить его столбцом по вашему выбору. Сортировка использовалась для сортировки только уникальных записей.

0
07.01.2020, 15:19
2 ответа

Как видно из вашего вывода, оба метода довольно быстрые. Однако между источниками ваших данных есть явная разница.

  • /dev/zero— это псевдофайл -, который просто генерирует поток нулей, что является довольно тривиальной задачей
  • /dev/urandomна самом деле обращается к пулу энтропии ядра для генерации случайных чисел и, следовательно, имеет гораздо больше накладных расходов на ввод-вывод и обработку вызовов, чем просто создание одного и того же фиксированного значения, как в случае /dev/zero.

Вот почему чтение из /dev/urandomникогда не может быть таким же быстрым, как чтение из /dev/zero. Если вам интересно, статья в Википедии о/dev/randomможет послужить отправной точкой для дальнейшего чтения.

6
28.01.2020, 02:13

Вы предполагаете, что файл на диске — это всего лишь байт -для -байтовой копии того, что выходит из устройства ввода. Это не должно быть.

Существует также другая потенциальная разница в производительности, помимо источника данных (, уже рассмотренного в другом ответе)-сжатие файловой системы, дедупликация и возможное создание разреженных файлов.

Если вы записываете файл, состоящий только из нулей, в файловую систему, которая сжимает данные, все, что должна делать такая файловая система, — это постоянно обновлять, насколько «велики» все эти нули. Это можно сделать очень быстро, так как нет никакой информации, кроме того факта, что единственным содержимым является ноль, и количество этих нулей когда-либо должно быть записано на диск.

Действительно случайные данные вообще нельзя сжимать.

Файловые системы также могут «дедуплицировать» блоки , даже если файлы не сжаты, особенно копировать -в -файловые системы записи, такие как ZFS. Только один блок нулей должен быть записан на диск в файловой системе, которая выполняет дедупликацию,тогда нужно будет добавить только ссылки на этот блок.

Маловероятно, что случайные данные будут создавать дубликаты блоков.

Файловая система также может определить, что содержимое блока полностью равно нулю, и создать разреженный файл -, в котором ничего не нужно записывать на диск.

Все это может быть намного быстрее, чем запись всех нулей на диск.

2
28.01.2020, 02:13

Теги

Похожие вопросы