Tác vụ blocking (chặn) chạy đồng bộ và giữ luồng JavaScript duy nhất cho tới khi xong — trong lúc đó không gì khác chạy được. Tác vụ non-blocking (không chặn) khởi động công việc, trả về ngay, rồi trả kết quả sau qua callback, Promise hoặc event, nên luồng vẫn rảnh để làm việc khác.
Vì sao Node đơn luồng nhưng vẫn non-blocking
JavaScript của bạn chạy trên luồng do điều khiển. I/O (file, mạng, DNS) được ủy thác cho — thứ dùng cơ chế bất đồng bộ của hệ điều hành và một nhỏ bên dưới. Trong khi công việc đó diễn ra ngoài luồng, event loop tiếp tục xử lý các callback khác. Khi I/O xong, callback của nó được xếp hàng và chạy.
