Может ли написать stdout место противодавления в процессе?

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

Некоторое время мне было любопытно узнать, можно ли использовать stdio для осуществления противодавления в этом смысле в процессе производства Unix (например, foo в foo | bar ). Казалось бы, даже если записи в stdout были заблокированы, когда буфер достигнет емкости, все равно необходимо, чтобы процесс-производитель выполнил Do Thing (ТМ), а не накапливал данные в памяти, ожидая записи в stdout. Кажется, что однопроцессная программа блокировки прошла тест, но для асинхронной программы может потребоваться собственный внутренний буфер и механизм противодавления, чтобы не взорваться с данными, ожидающими записи.

Так; насколько это возможно и каковы особенности?

One Solution collect form web for “Может ли написать stdout место противодавления в процессе?”

Труба имеет ограниченный размер буфера. Если производитель идет впереди потребителя, данные постепенно заполняют буфер трубы. Если буфер заполнен, вызов write в блоке производителя блокируется до тех пор, пока не останется место. Поэтому в систему встроено противодавление.

Размер буфера не менее 512 байт в любой POSIX-совместимой системе и часто более крупный и потенциально настраиваемый в современных организациях. Посмотрите, насколько большой буфер для буфера? Больше подробностей.

  • Может ли запущенный скрипт идентифицировать контекст ведения журнала?
  • bash: используйте переменную для хранения stderr | stdout redirection
  • Отображать вывод на консоль, пока используется grep
  • Я хочу поймать STDERR и STDOUT сценария с фоновым запуском
  • Откуда идет вывод приложения из диспетчера окон?
  • вывод скрипта Python не будет направлен в файл
  • Как реализовать отложенное stdout в дочернем процессе без использования временных файлов?
  • Вывод содержимого конвейера в файл и отображение количества строк в файле на stdout
  • Перенаправить bash stdout + stderr в один файл и stderr в другой файл
  • Каково поведение отмененного процесса над SSH, записывающего stdout, когда сеанс SSH теряется?
  • Как определить, присутствует ли строка в stdout, не влияя на вывод?
  • Linux и Unix - лучшая ОС в мире.