Действительно ли чтение является файлом на UNIX быстрее, чем запись файла?

Можно указать пользователя в системе crontab записи как так:

# For details see man 4 crontabs

# Example of job definition:
.---------------- minute (0 - 59)
|  .------------- hour (0 - 23)
|  |  .---------- day of month (1 - 31)
|  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
|  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
|  |  |  |  |
*  *  *  *  * user-name  command to be executed

6-м аргументом может быть имя пользователя. Дополнительно можно вставить сценарии /etc/cron.d каталог. Сценарии принимают ту же форму как crontab записи, описанные выше, например:

# /etc/cron.d/clamav-update
## Adjust this line...
MAILTO=root

## It is ok to execute it as root; freshclam drops privileges and becomes
## user 'clamav' as soon as possible
0  */3 * * * root /usr/share/clamav/freshclam-sleep

Можно поместить сценарии в эти каталоги, но они предназначены, чтобы быть выполненными как корень:

  • cron.daily
  • cron.hourly
  • cron.weekly
  • cron.monthly

Наконец можно создать пользователя базирующиеся crontab записи путем выполнения этой команды как данный пользователь:

$ crontab -e

Эти записи хранятся в файлах с тем же именем как пользователь в этом каталоге, /var/spool/cron/:

$ sudo ls -l /var/spool/cron/
-rw------- 1 saml root 0 Jun  6 06:43 saml
5
15.12.2018, 23:58
2 ответа
[

] Это зависит. Общего ответа на этот вопрос нет.[

] [

]При отсутствии кэширования запись дискового файла обычно происходит заметно медленнее, чем чтение. Это имеет мало общего с операционной системой и всем, что связано с оборудованием: и жесткие диски, и твердотельные носители читают быстрее, чем они записывают. Вторичный фактор связан со структурой файловой системы: при чтении нужно только пройтись по дереву каталогов и блочному списку до данных, затем прочитать данные, тогда как при записи нужно выполнить тот же самый обход, затем записать данные, затем обновить некоторые метаданные.[

] [

]Когда в игру вступает кэширование, все меняется. Чтение данных, которые находятся в кэше, происходит очень быстро, но для чтения данных, которых нет в кэше, необходимо пойти и взять их с диска. Операционные системы могут пытаться предугадать чтение, но это работает только в очень специфических случаях (в основном, последовательное чтение из файла). Запись же, с другой стороны, может быть почти мгновенной, если объем данных не слишком велик, так как данные записываются только в буфер памяти. Со временем буфер приходится записывать на диск, но к этому времени ваше приложение уже перешло к более сложным вещам.[

].
6
27.01.2020, 20:36

Письмо должно быть быстрее.

Список свободных блоков хранится в памяти, поэтому поиск следующего свободного блока будет очень быстрым. Если вы не записываете в синхронном режиме, то когда вы пытаетесь что-то записать, он просто скопирует данные в буфер ядра и поставит запись в очередь; ему не нужно ждать завершения ввода/вывода.

С другой стороны, чтение должно ждать завершения ввода/вывода, так как вызывающий абонент не может ничего сделать, пока не поступят данные.

2
27.01.2020, 20:36

Теги

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