ストリーム処理とキューには次の概念があります。背圧つまり、プロデューサプロセスがコンシューマプロセスよりも速い場合は、利用可能なメモリ/ストレージを超えないように、プロデューサの速度を遅くするメカニズムが必要です(許可または許可されていないメッセージを削除せずに)。
foo
私は今、stdioがこの意味で(例えばから)プロデューサーUnixプロセスに逆圧を加えるために使用できるかどうか疑問に思いますfoo | bar
。バッファが容量に達したときにstdoutへの書き込みがブロックされていても、プロデューサプロセスが正しい操作(TM)を実行し、stdoutに書き込まれるのを待つメモリにデータを蓄積しないことが依然として必要です。シングルスレッドブロックプログラムはテストに合格しているように見えますが、非同期プログラムには書き込み待ちのデータが多すぎるのを防ぐために独自の内部バッファリングと背圧メカニズムが必要になる場合があります。
では、これはどの程度まで可能ですか?具体的な状況はどうですか?
答え1
パイプのバッファサイズは制限されています。プロデューサが消費者より前になると、データは徐々にパイプのバッファを埋めます。バッファがいっぱいになると、write
スペースが発生するまでプロデューサの呼び出しがブロックされます。したがって、背圧はシステムに組み込まれています。
バッファサイズはPOSIX準拠システムでは少なくとも512バイトで、通常は最新のユニークでより大きく設定可能です。バラよりパイプバッファはどれくらい大きいですか?詳細については。