epoll, kqueue, and IOCP 49 5. Our thread is unblocked and our buffer is now filled with the data we're interested in. Figure 3. 2-A simplified view of the IOCP flow epoll, kqueue, and IOCP epoll is the Linux way of implementing an event queue. In terms of functionality, it has a lot in common with kqueue. The advantage of using epoll over other similar methods on Linux, such as select or poll, is that epoll was designed to work very efficiently with a large number of events. kqueue is the mac OS way of implementing an event queue (which originated from BSD) in operating systems such as Free BSD and Open BSD. In terms of high-level functionality, it's similar to epoll in concept but different in actual use. IOCP is the way Windows handle this type of event queue. In Windows, a completion port will let you know when an event has been completed. Now, this might sound like a minor difference, but it's not. This is especially apparent when you want to write a library since abstracting over both means you'll either have to model IOCP as readiness-based or model epoll/kqueue as completion-based. 