Nâng CaoNode.js iconNode.js

Backpressure trong Node.js streams là gì? Tại sao quan trọng?

  • Backpressure: Readable produce data nhanh hơn Writable consume — nếu không xử lý, data buffer trong memory vô hạn cho đến khi OOM crash. highWaterMark: ngưỡng buffer size (default 16KB cho object streams, 16384 bytes cho byte streams) — khi buffer vượt ngưỡng, stream signals slow down.
  • Cơ chế manual: writable.write(chunk) trả về false khi internal buffer đầy → stop reading; lắng nghe writable.on('drain', resume) để tiếp tục.

Ví dụ file upload: client upload 1GB/s, DB write chỉ 100MB/s — không có backpressure thì 900MB/s tích lũy trong RAM. pipe() tự xử lý nhưng không handle errors tốt. pipeline() API (stream/promises): await pipeline(req, transform, fs.createWriteStream(dest)) — tự xử lý backpressure VÀ cleanup tất cả streams khi error/complete, không leak.

Pitfall: .on('data', handler) puts stream in flowing mode bỏ qua backpressure — dùng async iteration for await (const chunk of readable) thay thế.

Xem toàn bộ Node.js cùng filter theo level & chủ đề con.

Mở danh sách Node.js