Stream backpressure
- Node.js kursu
- Uzman
- Ders 25/47
- 5 dk
Stream backpressure ve buffering öğrenirsin.
Backpressure nedir?
Bir Readable stream veriyi hızlı üretirken Writable tüketici yetişemezse araya bir kuyruk birikir. Bu kuyruk büyüdükçe bellek şişer. Backpressure (geri basınç), üreticiye 'dur, hazırlayamıyorum' sinyali gönderme mekanizmasıdır.
Node.js'te backpressure, queueSize >= highWaterMark koşuluyla tetiklenir. highWaterMark, buffer'ın üst sınırıdır; bu sınır geçilince stream pause() ile duraklatılır, tüketici yetişince resume() ile devam edilir. Bu derste backpressure mantığını basit bir applyBackpressure(queueSize, highWaterMark) fonksiyonuyla modelleyeceğiz. Gerçek stream'ler olay tabanlıdır; biz deterministik bir fonksiyonla kararı net göreceğiz.
Pause ve resume
Backpressure tetiklendiğinde stream pause() ile durur. Tüketici kuyruğu boşaltınca resume() ile akış devam eder. Bu iki yönlü iletişim, üretici ile tüketici arasındaki hız farkını dengeler.
Örnek: applyBackpressure(80, 100) false dönerse akış devam eder (flowing). applyBackpressure(120, 100) true dönerse akış durur (paused). Bu model, backpressure'ı tek bir boolean karara indirger; gerçek Node.js stream'inde ise 'drain' olayı ve callback zinciri bu kararı uygular. Önce basit modeli kurmak, ileride stream.pipeline ve writable.write'ın döndürdüğü boolean'ı anlamayı kolaylaştırır.
Uygulama Backpressure fonksiyonu yaz
applyBackpressure(queueSize, highWaterMark) fonksiyonu yaz. return queueSize >= highWaterMark ile geri döndür. console.log(applyBackpressure(80, 100)) ve console.log(applyBackpressure(120, 100)) yazdır.
Başlangıç kodu
// applyBackpressure fonksiyonu yaz
// kuyruk eşiği geçerse true döndürsün
// 80 ve 100, 120 ve 100 çağrılarını yazdır
// buraya yazÖrnek çözüm
function applyBackpressure(queueSize, highWaterMark) {
return queueSize >= highWaterMark;
}
console.log(applyBackpressure(80, 100));
console.log(applyBackpressure(120, 100));Beklenen çıktı
false true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 applyBackpressure(120, 100) ne döndürür?
function applyBackpressure(q, h) { return q >= h; }
applyBackpressure(120, 100)- true Doğru cevap
- 120
- false
- 100
Açıklama: 120 >= 100 olduğundan true döner.
2 Karar koşulunu tamamla
return queueSize >= ____;
return queueSize >= highWaterMark;
Açıklama: Kuyruk, highWaterMark ile karşılaştırılır.
3 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
Readable |
Veri üretir |
Writable |
Veri tüketir |
highWaterMark |
Buffer üst sınırı |
pause() |
Akışı duraklatır |