Các I/O models là gì? So sánh blocking, non-blocking, I/O multiplexing và async I/O.

Linux có 5 I/O model, từ đơn giản nhất đến hiệu suất cao nhất:

  • Blocking I/O: syscall (read/write) block thread cho đến khi data sẵn sàng — đơn giản nhưng thread không làm gì được trong lúc chờ.
  • Non-blocking I/O: syscall trả về EAGAIN ngay nếu chưa có data — application phải poll liên tục (busy waiting, tốn CPU).
  • I/O Multiplexing (select/poll/epoll): một thread monitor nhiều file descriptors, block trên select/epoll_wait cho đến khi ít nhất 1 fd ready — đây là nền tảng của event loop (Node.js, Nginx).
  • Signal-driven I/O (SIGIO): kernel gửi signal khi fd ready — khó dùng, hiếm gặp.
  • Async I/O (AIO/io_uring): initiate I/O và tiếp tục làm việc khác, được notify qua callback/completion queue khi xong — truly async, không block.

io_uring (Linux 5.1+) là next-gen: zero-copy, batching syscalls, giảm context switch đáng kể; Node.js 18+ đang integrate. Thực tế: Node.js libuv dùng epoll (Linux)/kqueue (macOS)/IOCP (Windows); Java NIO/Netty cũng dùng epoll; Go runtime có custom network poller trên epoll/kqueue.

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

Mở danh sách Operating System