Contrapressão
Uma fonte mais rápida que o consumo: sem teto, a memória cresce até o processo morrer. Com teto, a falha é visível.
Quando pedidos chegam mais depressa do que o laço atende, eles se acumulam na fila de prontas. Sem limite, a fila cresce até o processo ser morto por falta de memória — horas depois, e sem mensagem que aponte a causa. O teto troca essa morte lenta por uma recusa imediata.
dataforge
adopt Arcane.Laco as L
laco := L.novo(2) // no máximo 2 esperando
aceitos := [L.agendar(laco, lambda => void) cycle i in range(5)]
assert aceitos is [yes, yes, no, no, no]
assert L.estatisticas(laco)["recusadas"] is 3Quem recebe o no | Faz |
|---|---|
| um servidor | responde 503 com Retry-After — o cliente tenta depois |
| um leitor de fila | para de ler da fonte até a fila baixar |
| um produtor de fibras | usa um canal, que espera em vez de recusar |