Blocking I/O
The thread stops and waits until the I/O finishes.
More waiting requests usually require more threads or remain in a queue.
Systems & OS
Compare thread pools and event loops under the same workload, then inspect queues, I/O activity, and completion time.
Start with what happens while an I/O operation is unfinished.
The thread stops and waits until the I/O finishes.
More waiting requests usually require more threads or remain in a queue.
The event loop handles other requests while I/O is pending.
One event loop can coordinate many pending requests without waiting on each one.
Tune the workload, then run both models together.
A thread stays occupied while I/O is in progress.
Workers return after starting I/O and can process other runnable work.
Compare both models under the same workload.
Actual performance depends on the runtime, operating system, scheduler, device, protocol, and implementation.
Blocking keeps the calling execution context waiting. Non-blocking returns control while the operation progresses elsewhere.
This is a different axis describing how completion is observed or delivered; the terms are not exact synonyms.
Non-blocking designs help most when elapsed time is dominated by I/O waiting. They do not remove CPU work.
I/O multiplexing allows a single thread to monitor many sockets or file descriptors and respond only when one of them becomes ready, rather than dedicating a blocked thread to every connection. select and poll check the supplied descriptors for read, write, or error readiness, but their scanning overhead can increase as the number of descriptors grows. On Linux, epoll keeps registered descriptors in the kernel and reports ready events, making it more efficient for servers and other applications that manage large numbers of concurrent connections.