Node.js
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.
Örnek çözümü göster
const HIGH_WATER_MARK = 16;
function bufferState(currentSize) {
return currentSize >= HIGH_WATER_MARK ? 'paused' : 'flowing';
}
console.log(bufferState(8));
console.log(bufferState(20));
Kendini test et
-
Ternary ifadesini tamamla
return currentSize >= HIGH_WATER_MARK ? '____' : 'flowing';
Cevabı göster
return currentSize >= HIGH_WATER_MARK ? 'paused' : 'flowing';
-
Parçayı rolüne eşle
- HIGH_WATER_MARK
- Buffer üst sınırı
- flowing
- Aktif iter
- paused
- Bekler
- ternary
- Koşullu ifade
-
bufferState(8) HIGH_WATER_MARK=16 ise ne döndürür?
const HIGH_WATER_MARK = 16;
function bufferState(c) {
return c >= HIGH_WATER_MARK ? 'paused' : 'flowing';
}
bufferState(8)
Cevabı göster
flowing — 8 < 16 olduğundan 'flowing' döner.
Sıradaki ders: Object mode