HighWaterMark
- Node.js kursu
- Uzman
- Ders 26/47
- 5 dk
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
// ü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
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
return currentSize >= HIGH_WATER_MARK ? '____' : 'flowing';
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?
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.