Vamos supor que você tenha um pipeline como o seguinte:
$ a | b
Se bparar de processar stdin, depois de um tempo, o tubo será preenchido e gravado, aaté o stdout, será bloqueado (até que o bprocesso comece novamente ou a matriz morra).
Se eu quisesse evitar isso, ficaria tentado a usar um tubo maior (ou, mais simplesmente buffer(1)) assim:
$ a | buffer | b
Isso simplesmente me daria mais tempo, mas no final aacabaria.
O que eu gostaria de ter (para um cenário muito específico que estou abordando) é ter um canal "vazado" que, quando cheio, soltaria alguns dados (idealmente, linha por linha) do buffer para permitir acontinuar processamento (como você provavelmente pode imaginar, os dados que fluem no canal são dispensáveis, ou seja, ter os dados processados por bé menos importante do que apoder executar sem bloquear).
Para resumir, eu adoraria ter algo como um buffer limitado e com vazamento:
$ a | leakybuffer | b
Provavelmente eu poderia implementá-lo facilmente em qualquer idioma, estava me perguntando se há algo "pronto para usar" (ou algo como uma única linha de base) que estou perdendo.
Nota: nos exemplos, estou usando pipes regulares, mas a pergunta se aplica igualmente aos pipes nomeados
Embora tenha concedido a resposta abaixo, também decidi implementar o comando leakybuffer porque a solução simples abaixo tinha algumas limitações: https://github.com/CAFxX/leakybuffer