CodeBlanks Logo Icon CodeBlanks

Stream backpressure

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

index.js
// 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

index.js
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?

index.js
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

Soru
return queueSize >= ____;
Cevap
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

Uzman bölümündeki tüm dersler