CodeBlanks Logo Icon CodeBlanks

HighWaterMark

highWaterMark ve buffer sınırını öğrenirsin.

HighWaterMark nedir?

highWaterMark, bir stream'in buffer'ı için üst sınırdır. Bu sınır geçilmeden önce stream veriyi tamponlar; geçilince backpressure tetiklenir. Varsayılan değer bayt modunda 64 KB, nesne kipinde 16 nesnedir.

Bir bufferState(currentSize) fonksiyonu bu mantığı modeller: currentSize >= HIGH_WATER_MARK ise 'paused', değilse 'flowing' döndürür. HIGH_WATER_MARK bir sabittir; örneğin 16. bufferState(8) 'flowing', bufferState(20) 'paused' döndürür. Ternary operatörü koşul ? doğru : yanlış biçimindedir; if/else'nin kısa yazımıdır. Bu model, highWaterMark'ı tek bir sabitle temsil eder ve deterministik çıktı verir.

Flowing ve paused

Buffer 'flowing' durumundayken stream veriyi tüketiciye aktif iter. 'paused' durumundayken ise bekler; tüketici .read() çağırınca veri verir. Bu iki durum, highWaterMark'a bağlı olarak değişir.

Örnek: bufferState(8) 'flowing' döner, çünkü 8 < 16. bufferState(20) 'paused' döner, çünkü 20 >= 16. Bu geçiş, gerçek Node.js stream'inde 'drain' olayıyla yapılır. Basit modelde ternary ile tek satırda gösterilir. Bu sayede highWaterMark'ın rolünü eşiği aşan boyutla görselleştirirsin; ileride stream.Readable'ın highWaterMark seçeneğini ayarlarken bu zihni modeli kullanırsın.

Uygulama Buffer durumu fonksiyonu yaz

const HIGH_WATER_MARK = 16 tanımla. function bufferState(currentSize) { return currentSize >= HIGH_WATER_MARK ? 'paused' : 'flowing'; } yaz. console.log(bufferState(8)) ve console.log(bufferState(20)) yazdır.

Başlangıç kodu

index.js
// üst sınır sabitini 16 tanımla
// bufferState fonksiyonu yaz: ternary ile 'paused' ya da 'flowing' döndürsün
// 8 ve 20 çağrılarını yazdır
// buraya yaz

Örnek çözüm

index.js
const HIGH_WATER_MARK = 16;
function bufferState(currentSize) {
  return currentSize >= HIGH_WATER_MARK ? 'paused' : 'flowing';
}
console.log(bufferState(8));
console.log(bufferState(20));

Beklenen çıktı

flowing
paused

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Ternary ifadesini tamamla

Soru
return currentSize >= HIGH_WATER_MARK ? '____' : 'flowing';
Cevap
return currentSize >= HIGH_WATER_MARK ? 'paused' : 'flowing';

Açıklama: Eşik geçilince 'paused' döner.

2 Parçayı rolüne eşle

Kavram Anlamı
HIGH_WATER_MARK Buffer üst sınırı
flowing Aktif iter
paused Bekler
ternary Koşullu ifade

3 bufferState(8) HIGH_WATER_MARK=16 ise ne döndürür?

index.js
const HIGH_WATER_MARK = 16;
function bufferState(c) {
  return c >= HIGH_WATER_MARK ? 'paused' : 'flowing';
}
bufferState(8)
  • 8
  • flowing Doğru cevap
  • paused
  • 16

Açıklama: 8 < 16 olduğundan 'flowing' döner.

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