[{"data":1,"prerenderedAt":261},["ShallowReactive",2],{"blog-post-on-backpressure":3},{"id":4,"title":5,"author":6,"body":7,"cover":248,"date":249,"description":250,"extension":251,"meta":252,"navigation":253,"path":254,"seo":255,"stem":256,"tags":257,"__hash__":260},"blog\u002Fblog\u002Fen\u002Fon-backpressure.md","A Gentle Note on Backpressure","Pietro Piva Vieira",{"type":8,"value":9,"toc":245},"minimark",[10,14,28,33,55,58,238,241],[11,12,5],"h1",{"id":13},"a-gentle-note-on-backpressure",[15,16,17,18,22,23,27],"p",{},"When a fast producer meets a slow consumer, something has to give. The question\nis ",[19,20,21],"em",{},"what"," — and ",[24,25,26],"strong",{},"backpressure"," is how a well-behaved system answers it.",[29,30,32],"h2",{"id":31},"three-honest-options","Three honest options",[34,35,36,43,49],"ol",{},[37,38,39,42],"li",{},[24,40,41],{},"Buffer"," — absorb the spike, until memory says no.",[37,44,45,48],{},[24,46,47],{},"Drop"," — shed load deliberately, and admit it in your metrics.",[37,50,51,54],{},[24,52,53],{},"Slow down"," — push back on the producer so it eases off.",[15,56,57],{},"Each is a trade-off. The mistake is pretending you didn't make one.",[59,60,65],"pre",{"className":61,"code":62,"language":63,"meta":64,"style":64},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","async function* throttle\u003CT>(src: AsyncIterable\u003CT>, max: number) {\n  let inFlight = 0\n  for await (const item of src) {\n    while (inFlight >= max) await tick()\n    inFlight++\n    yield item\n  }\n}\n","ts","",[66,67,68,131,148,181,208,217,226,232],"code",{"__ignoreMap":64},[69,70,73,77,80,84,88,92,96,99,103,106,109,111,113,116,119,121,125,128],"span",{"class":71,"line":72},"line",1,[69,74,76],{"class":75},"sbsja","async",[69,78,79],{"class":75}," function",[69,81,83],{"class":82},"smGrS","*",[69,85,87],{"class":86},"sGLFI"," throttle",[69,89,91],{"class":90},"sP7_E","\u003C",[69,93,95],{"class":94},"sbgvK","T",[69,97,98],{"class":90},">(",[69,100,102],{"class":101},"s99_P","src",[69,104,105],{"class":82},":",[69,107,108],{"class":94}," AsyncIterable",[69,110,91],{"class":90},[69,112,95],{"class":94},[69,114,115],{"class":90},">,",[69,117,118],{"class":101}," max",[69,120,105],{"class":82},[69,122,124],{"class":123},"sZMiF"," number",[69,126,127],{"class":90},")",[69,129,130],{"class":90}," {\n",[69,132,134,137,141,144],{"class":71,"line":133},2,[69,135,136],{"class":75},"  let",[69,138,140],{"class":139},"su5hD"," inFlight",[69,142,143],{"class":82}," =",[69,145,147],{"class":146},"srdBf"," 0\n",[69,149,151,155,158,162,165,169,172,175,178],{"class":71,"line":150},3,[69,152,154],{"class":153},"sVHd0","  for",[69,156,157],{"class":153}," await",[69,159,161],{"class":160},"skxfh"," (",[69,163,164],{"class":75},"const",[69,166,168],{"class":167},"s_hVV"," item",[69,170,171],{"class":82}," of",[69,173,174],{"class":139}," src",[69,176,177],{"class":160},") ",[69,179,180],{"class":90},"{\n",[69,182,184,187,189,192,195,197,199,202,205],{"class":71,"line":183},4,[69,185,186],{"class":153},"    while",[69,188,161],{"class":160},[69,190,191],{"class":139},"inFlight",[69,193,194],{"class":82}," >=",[69,196,118],{"class":139},[69,198,177],{"class":160},[69,200,201],{"class":153},"await",[69,203,204],{"class":86}," tick",[69,206,207],{"class":160},"()\n",[69,209,211,214],{"class":71,"line":210},5,[69,212,213],{"class":139},"    inFlight",[69,215,216],{"class":82},"++\n",[69,218,220,223],{"class":71,"line":219},6,[69,221,222],{"class":153},"    yield",[69,224,225],{"class":139}," item\n",[69,227,229],{"class":71,"line":228},7,[69,230,231],{"class":90},"  }\n",[69,233,235],{"class":71,"line":234},8,[69,236,237],{"class":90},"}\n",[15,239,240],{},"The systems I trust most are the ones that are honest about their limits.",[242,243,244],"style",{},"html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":64,"searchDepth":133,"depth":133,"links":246},[247],{"id":31,"depth":133,"text":32},"\u002Fradio\u002Fcovers\u002Fbubblestream.svg","2026-03-08","Flow control is the quiet hero of every reliable streaming system.","md",{},true,"\u002Fblog\u002Fen\u002Fon-backpressure",{"title":5,"description":250},"blog\u002Fen\u002Fon-backpressure",[258,259],"engineering","streaming","aycfangmZB_OCA_qgmp6Imn_D6wtXElbeCJxri2kfZY",1781839022646]