Docs học tập
Backend nền tảng

B2 · Blocking và Non-blocking I/O

Phần lớn thời gian của backend là chờ I/O: DB, mạng, file.

B2 · Middle

Blocking: gọi điện đặt món rồi cầm máy đứng chờ đến khi nấu xong. Non-blocking: đặt xong thì cúp máy làm việc khác, quán gọi lại khi có đồ.

Cốt lõi

  • Phần lớn thời gian của backend là chờ I/O: DB, mạng, file.
  • Blocking: luồng bị giữ trong lúc chờ → cần nhiều luồng (mô hình mỗi request một thread).
  • Non-blocking: luồng được giải phóng, nhận kết quả qua callback/event → ít luồng phục vụ nhiều kết nối.

Đánh đổi

Trộn code blocking vào hệ thống non-blocking là lỗi phổ biến nhất: chặn event loop là chặn mọi request.

Trong thực tế

Gọi readFileSync trong handler Node.js làm mọi request khác phải chờ.

Bug thường gặp

Một API bên thứ ba chậm 30 giây chiếm hết thread pool → service không nhận thêm request dù CPU gần như rảnh.

Tự hỏi lại

Thread pool của framework (Spring, Tomcat…) hết luồng thì chuyện gì xảy ra?

On this page