libev provides a full-featured and high-performance event loop that is
loosely modelled after libevent. It includes relative timers, absolute
timers with customized rescheduling, synchronous signals, process status
change events, event watchers dealing with the event loop itself, file
watchers, and even limited support for fork events. It uses a priority
queue to manage timers and uses arrays as fundamental data structure. It
has no artificial limitations on the number of watchers waiting for the
libev supports select, poll, epoll, kqueue, and inotify.