Как перенаправление linux управляет быстрым вводом и медленным выводом?

Использовать арифметику bash:

if (( (a-b) > 3 )) || (( (b-a) > 3 )); then
  echo fail
fi

Основано на предположении @ctrl -alt -Делора.

0
20.05.2021, 14:56
1 ответ

Рассмотрим, чтоcat(делает сам по себе ):читает со своего входа в буфер в памяти (, размер которого определяется cat), и записывает на свой стандартный вывод. чтение и запись блокируются :до тех пор, пока они не достигнут конца ввода, чтение будет остановлено и будет ожидать данных, если это необходимо, и аналогичным образом запись будет остановлена ​​и будет ждать для записи данных при необходимости. Это обеспечивает некоторую связь между выходом и вводом; если вход может предоставить данные быстрее, чем выход может их воспринять, запись будет заблокирована, и cat, таким образом, прекратит чтение, пока не сможет снова записать.

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

0
28.07.2021, 11:30

Теги

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