Intereting Posts
Как удалить файл без каких-либо разрешений? Почему sshd отображается несколько раз на одной ветви pstree? Как можно запретить печать полного пути к подкаталогам при использовании CDPATH = «.: / Some / path»? отображать имя файла, за которым следует контент без взаимодействия Где я должен устанавливать сторонние двоичные программы? Копировать команду из истории в приглашение bash Исключение наследования переменных среды как удалить ярлык SELinux? Разверните вывод последних двух команд / boot слишком мал для обновления Специфика использования переменной BASH и условного IF Как я могу заставить crontab использовать другое место установки PHP? Используйте OpenVPN на TCP 443, не вмешиваясь в мой веб-сервер Домашняя папка непреднамеренно разоблачена при использовании акций samba Какая команда mysql может показать мне таблицы в базе данных и сколько строк есть?

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

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

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

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

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

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