[{"data":1,"prerenderedAt":704},["ShallowReactive",2],{"blog-all":3},[4,262,407,580],{"id":5,"title":6,"author":7,"body":8,"cover":249,"date":250,"description":251,"extension":252,"meta":253,"navigation":254,"path":255,"seo":256,"stem":257,"tags":258,"__hash__":261},"blog\u002Fblog\u002Fen\u002Fon-backpressure.md","A Gentle Note on Backpressure","Pietro Piva Vieira",{"type":9,"value":10,"toc":246},"minimark",[11,15,29,34,56,59,239,242],[12,13,6],"h1",{"id":14},"a-gentle-note-on-backpressure",[16,17,18,19,23,24,28],"p",{},"When a fast producer meets a slow consumer, something has to give. The question\nis ",[20,21,22],"em",{},"what"," — and ",[25,26,27],"strong",{},"backpressure"," is how a well-behaved system answers it.",[30,31,33],"h2",{"id":32},"three-honest-options","Three honest options",[35,36,37,44,50],"ol",{},[38,39,40,43],"li",{},[25,41,42],{},"Buffer"," — absorb the spike, until memory says no.",[38,45,46,49],{},[25,47,48],{},"Drop"," — shed load deliberately, and admit it in your metrics.",[38,51,52,55],{},[25,53,54],{},"Slow down"," — push back on the producer so it eases off.",[16,57,58],{},"Each is a trade-off. The mistake is pretending you didn't make one.",[60,61,66],"pre",{"className":62,"code":63,"language":64,"meta":65,"style":65},"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","",[67,68,69,132,149,182,209,218,227,233],"code",{"__ignoreMap":65},[70,71,74,78,81,85,89,93,97,100,104,107,110,112,114,117,120,122,126,129],"span",{"class":72,"line":73},"line",1,[70,75,77],{"class":76},"sbsja","async",[70,79,80],{"class":76}," function",[70,82,84],{"class":83},"smGrS","*",[70,86,88],{"class":87},"sGLFI"," throttle",[70,90,92],{"class":91},"sP7_E","\u003C",[70,94,96],{"class":95},"sbgvK","T",[70,98,99],{"class":91},">(",[70,101,103],{"class":102},"s99_P","src",[70,105,106],{"class":83},":",[70,108,109],{"class":95}," AsyncIterable",[70,111,92],{"class":91},[70,113,96],{"class":95},[70,115,116],{"class":91},">,",[70,118,119],{"class":102}," max",[70,121,106],{"class":83},[70,123,125],{"class":124},"sZMiF"," number",[70,127,128],{"class":91},")",[70,130,131],{"class":91}," {\n",[70,133,135,138,142,145],{"class":72,"line":134},2,[70,136,137],{"class":76},"  let",[70,139,141],{"class":140},"su5hD"," inFlight",[70,143,144],{"class":83}," =",[70,146,148],{"class":147},"srdBf"," 0\n",[70,150,152,156,159,163,166,170,173,176,179],{"class":72,"line":151},3,[70,153,155],{"class":154},"sVHd0","  for",[70,157,158],{"class":154}," await",[70,160,162],{"class":161},"skxfh"," (",[70,164,165],{"class":76},"const",[70,167,169],{"class":168},"s_hVV"," item",[70,171,172],{"class":83}," of",[70,174,175],{"class":140}," src",[70,177,178],{"class":161},") ",[70,180,181],{"class":91},"{\n",[70,183,185,188,190,193,196,198,200,203,206],{"class":72,"line":184},4,[70,186,187],{"class":154},"    while",[70,189,162],{"class":161},[70,191,192],{"class":140},"inFlight",[70,194,195],{"class":83}," >=",[70,197,119],{"class":140},[70,199,178],{"class":161},[70,201,202],{"class":154},"await",[70,204,205],{"class":87}," tick",[70,207,208],{"class":161},"()\n",[70,210,212,215],{"class":72,"line":211},5,[70,213,214],{"class":140},"    inFlight",[70,216,217],{"class":83},"++\n",[70,219,221,224],{"class":72,"line":220},6,[70,222,223],{"class":154},"    yield",[70,225,226],{"class":140}," item\n",[70,228,230],{"class":72,"line":229},7,[70,231,232],{"class":91},"  }\n",[70,234,236],{"class":72,"line":235},8,[70,237,238],{"class":91},"}\n",[16,240,241],{},"The systems I trust most are the ones that are honest about their limits.",[243,244,245],"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":65,"searchDepth":134,"depth":134,"links":247},[248],{"id":32,"depth":134,"text":33},"\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":6,"description":251},"blog\u002Fen\u002Fon-backpressure",[259,260],"engineering","streaming","aycfangmZB_OCA_qgmp6Imn_D6wtXElbeCJxri2kfZY",{"id":263,"title":264,"author":7,"body":265,"cover":396,"date":397,"description":398,"extension":252,"meta":399,"navigation":254,"path":400,"seo":401,"stem":402,"tags":403,"__hash__":406},"blog\u002Fblog\u002Fen\u002Fwelcome.md","Welcome to the Aero Web",{"type":9,"value":266,"toc":392},[267,270,281,284,288,291,309,315,319,386,389],[12,268,264],{"id":269},"welcome-to-the-aero-web",[16,271,272,273,276,277,280],{},"There was a stretch of the late 2000s and early 2010s when interfaces felt\n",[25,274,275],{},"optimistic",". Glass, water, bubbles, bright skies, a little gloss on every\nbutton. People called it ",[20,278,279],{},"Frutiger Aero",", and I have a soft spot for it.",[16,282,283],{},"So I rebuilt my portfolio in that spirit.",[30,285,287],{"id":286},"what-this-is","What this is",[16,289,290],{},"A calm, glossy place to keep the things I care about:",[292,293,294,297,300,303,306],"ul",{},[38,295,296],{},"professional experience",[38,298,299],{},"academic background",[38,301,302],{},"published papers",[38,304,305],{},"projects",[38,307,308],{},"and now, a blog",[310,311,312],"blockquote",{},[16,313,314],{},"Nostalgia is just memory with the rough edges sanded off — and a glossy\nhighlight added on top.",[30,316,318],{"id":317},"a-tiny-code-sample","A tiny code sample",[60,320,322],{"className":62,"code":321,"language":64,"meta":65,"style":65},"export function shine(strength = 1) {\n  return `inset 0 1px 0 rgba(255,255,255,${0.9 * strength})`\n}\n",[67,323,324,349,382],{"__ignoreMap":65},[70,325,326,329,331,334,337,340,342,345,347],{"class":72,"line":73},[70,327,328],{"class":154},"export",[70,330,80],{"class":76},[70,332,333],{"class":87}," shine",[70,335,336],{"class":91},"(",[70,338,339],{"class":102},"strength",[70,341,144],{"class":83},[70,343,344],{"class":147}," 1",[70,346,128],{"class":91},[70,348,131],{"class":91},[70,350,351,354,358,362,365,368,371,374,377,379],{"class":72,"line":134},[70,352,353],{"class":154},"  return",[70,355,357],{"class":356},"sjJ54"," `",[70,359,361],{"class":360},"s_sjI","inset 0 1px 0 rgba(255,255,255,",[70,363,364],{"class":356},"${",[70,366,367],{"class":147},"0.9",[70,369,370],{"class":83}," *",[70,372,373],{"class":140}," strength",[70,375,376],{"class":356},"}",[70,378,128],{"class":360},[70,380,381],{"class":356},"`\n",[70,383,384],{"class":72,"line":151},[70,385,238],{"class":91},[16,387,388],{},"Thanks for stopping by. Turn on the radio, flip to night mode, and stay a while.",[243,390,391],{},"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 .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--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 .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 .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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":65,"searchDepth":134,"depth":134,"links":393},[394,395],{"id":286,"depth":134,"text":287},{"id":317,"depth":134,"text":318},"\u002Fradio\u002Fcovers\u002Faqua-bloom.svg","2026-05-20","Why I rebuilt my corner of the internet in glossy, optimistic Frutiger Aero.",{},"\u002Fblog\u002Fen\u002Fwelcome",{"title":264,"description":398},"blog\u002Fen\u002Fwelcome",[404,405],"design","nostalgia","juwatL7O_1CRin9PuzrxyTzao1KA6mPHcJCDVYfII8I",{"id":408,"title":409,"author":7,"body":410,"cover":249,"date":250,"description":572,"extension":252,"meta":573,"navigation":254,"path":574,"seo":575,"stem":576,"tags":577,"__hash__":579},"blog\u002Fblog\u002Fpt-br\u002Fon-backpressure.md","Uma Nota Tranquila sobre Backpressure",{"type":9,"value":411,"toc":569},[412,415,425,429,449,452,564,567],[12,413,409],{"id":414},"uma-nota-tranquila-sobre-backpressure",[16,416,417,418,421,422,424],{},"Quando um produtor rápido encontra um consumidor lento, algo precisa ceder. A\npergunta é ",[20,419,420],{},"o quê"," — e ",[25,423,27],{}," é como um sistema bem-comportado responde.",[30,426,428],{"id":427},"três-opções-honestas","Três opções honestas",[35,430,431,437,443],{},[38,432,433,436],{},[25,434,435],{},"Bufferizar"," — absorver o pico, até a memória dizer não.",[38,438,439,442],{},[25,440,441],{},"Descartar"," — descartar carga de propósito, e admitir isso nas métricas.",[38,444,445,448],{},[25,446,447],{},"Desacelerar"," — empurrar de volta no produtor para que ele alivie.",[16,450,451],{},"Cada uma é um trade-off. O erro é fingir que você não fez nenhum.",[60,453,454],{"className":62,"code":63,"language":64,"meta":65,"style":65},[67,455,456,494,504,524,544,550,556,560],{"__ignoreMap":65},[70,457,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492],{"class":72,"line":73},[70,459,77],{"class":76},[70,461,80],{"class":76},[70,463,84],{"class":83},[70,465,88],{"class":87},[70,467,92],{"class":91},[70,469,96],{"class":95},[70,471,99],{"class":91},[70,473,103],{"class":102},[70,475,106],{"class":83},[70,477,109],{"class":95},[70,479,92],{"class":91},[70,481,96],{"class":95},[70,483,116],{"class":91},[70,485,119],{"class":102},[70,487,106],{"class":83},[70,489,125],{"class":124},[70,491,128],{"class":91},[70,493,131],{"class":91},[70,495,496,498,500,502],{"class":72,"line":134},[70,497,137],{"class":76},[70,499,141],{"class":140},[70,501,144],{"class":83},[70,503,148],{"class":147},[70,505,506,508,510,512,514,516,518,520,522],{"class":72,"line":151},[70,507,155],{"class":154},[70,509,158],{"class":154},[70,511,162],{"class":161},[70,513,165],{"class":76},[70,515,169],{"class":168},[70,517,172],{"class":83},[70,519,175],{"class":140},[70,521,178],{"class":161},[70,523,181],{"class":91},[70,525,526,528,530,532,534,536,538,540,542],{"class":72,"line":184},[70,527,187],{"class":154},[70,529,162],{"class":161},[70,531,192],{"class":140},[70,533,195],{"class":83},[70,535,119],{"class":140},[70,537,178],{"class":161},[70,539,202],{"class":154},[70,541,205],{"class":87},[70,543,208],{"class":161},[70,545,546,548],{"class":72,"line":211},[70,547,214],{"class":140},[70,549,217],{"class":83},[70,551,552,554],{"class":72,"line":220},[70,553,223],{"class":154},[70,555,226],{"class":140},[70,557,558],{"class":72,"line":229},[70,559,232],{"class":91},[70,561,562],{"class":72,"line":235},[70,563,238],{"class":91},[16,565,566],{},"Os sistemas em que mais confio são os que são honestos sobre seus limites.",[243,568,245],{},{"title":65,"searchDepth":134,"depth":134,"links":570},[571],{"id":427,"depth":134,"text":428},"Controle de fluxo é o herói silencioso de todo sistema de streaming confiável.",{},"\u002Fblog\u002Fpt-br\u002Fon-backpressure",{"title":409,"description":572},"blog\u002Fpt-br\u002Fon-backpressure",[578,260],"engenharia","Z9onLxJsls4FHqH7zc162P4eTdzKMBdcRALiSNin968",{"id":581,"title":582,"author":7,"body":583,"cover":396,"date":397,"description":697,"extension":252,"meta":698,"navigation":254,"path":699,"seo":700,"stem":701,"tags":702,"__hash__":703},"blog\u002Fblog\u002Fpt-br\u002Fwelcome.md","Bem-vindo à Web Aero",{"type":9,"value":584,"toc":693},[585,588,598,601,605,608,625,630,634,688,691],[12,586,582],{"id":587},"bem-vindo-à-web-aero",[16,589,590,591,594,595,597],{},"Houve um período no fim dos anos 2000 e início dos 2010 em que as interfaces\npareciam ",[25,592,593],{},"otimistas",". Vidro, água, bolhas, céus claros, um brilho em cada\nbotão. Chamavam de ",[20,596,279],{},", e eu tenho um carinho especial por isso.",[16,599,600],{},"Então reconstruí meu portfólio nesse espírito.",[30,602,604],{"id":603},"o-que-é-isto","O que é isto",[16,606,607],{},"Um lugar calmo e brilhante para guardar as coisas com que me importo:",[292,609,610,613,616,619,622],{},[38,611,612],{},"experiência profissional",[38,614,615],{},"formação acadêmica",[38,617,618],{},"artigos publicados",[38,620,621],{},"projetos",[38,623,624],{},"e agora, um blog",[310,626,627],{},[16,628,629],{},"Nostalgia é só memória com as arestas lixadas — e um brilho extra por cima.",[30,631,633],{"id":632},"um-pequeno-trecho-de-código","Um pequeno trecho de código",[60,635,637],{"className":62,"code":636,"language":64,"meta":65,"style":65},"export function brilho(forca = 1) {\n  return `inset 0 1px 0 rgba(255,255,255,${0.9 * forca})`\n}\n",[67,638,639,661,684],{"__ignoreMap":65},[70,640,641,643,645,648,650,653,655,657,659],{"class":72,"line":73},[70,642,328],{"class":154},[70,644,80],{"class":76},[70,646,647],{"class":87}," brilho",[70,649,336],{"class":91},[70,651,652],{"class":102},"forca",[70,654,144],{"class":83},[70,656,344],{"class":147},[70,658,128],{"class":91},[70,660,131],{"class":91},[70,662,663,665,667,669,671,673,675,678,680,682],{"class":72,"line":134},[70,664,353],{"class":154},[70,666,357],{"class":356},[70,668,361],{"class":360},[70,670,364],{"class":356},[70,672,367],{"class":147},[70,674,370],{"class":83},[70,676,677],{"class":140}," forca",[70,679,376],{"class":356},[70,681,128],{"class":360},[70,683,381],{"class":356},[70,685,686],{"class":72,"line":151},[70,687,238],{"class":91},[16,689,690],{},"Obrigado pela visita. Ligue o rádio, mude para o modo noturno e fique um pouco.",[243,692,391],{},{"title":65,"searchDepth":134,"depth":134,"links":694},[695,696],{"id":603,"depth":134,"text":604},{"id":632,"depth":134,"text":633},"Por que reconstruí meu cantinho da internet no estilo Frutiger Aero, brilhante e otimista.",{},"\u002Fblog\u002Fpt-br\u002Fwelcome",{"title":582,"description":697},"blog\u002Fpt-br\u002Fwelcome",[404,405],"REXXQcjc-UtVTbRlwqeVwBIXiIZXpc-SvcITebBrDl4",1781839022535]