Glossary
kqueue
BSD's I/O event notification mechanism — register interest in events from file descriptors, sockets, timers, processes, signals, and get woken when they fire.
kqueue(2) is BSD's I/O event notification mechanism — the equivalent of Linux's epoll. Originally from FreeBSD; XNU inherits it largely unchanged.
A kqueue is a file descriptor backed by an in-kernel queue of events. You register interest in specific events via kevent(2):
int kq = kqueue();
struct kevent ev;
EV_SET(&ev, fd, EVFILT_READ, EV_ADD, 0, 0, NULL);
kevent(kq, &ev, 1, NULL, 0, NULL); // register
struct kevent events[16];
int n = kevent(kq, NULL, 0, events, 16, NULL); // block until events arrive
Event sources kqueue knows about:
EVFILT_READ/EVFILT_WRITE— file descriptors ready for I/O.EVFILT_VNODE— vnode changes (file written, renamed, deleted).EVFILT_PROC— process state changes (exit, fork).EVFILT_SIGNAL— signal received.EVFILT_TIMER— periodic or one-shot timer.EVFILT_MACHPORT— Mach port has a message.EVFILT_USER— user-triggered event for cross-thread wake.
kqueue is the foundation libdispatch (GCD) is built on. Every GCD DispatchSource is a kqueue registration under the hood; the dispatch worker threads block in kevent waiting for any registered source to fire.
See also: BSD, and the BSD personality article.