+ <dt><code>EVBACKEND_SELECT</code> (value 1, portable select backend)</dt>
+ <dd>
+ <p>This is your standard select(2) backend. Not <i>completely</i> standard, as
+libev tries to roll its own fd_set with no limits on the number of fds,
+but if that fails, expect a fairly low limit on the number of fds when
+using this backend. It doesn't scale too well (O(highest_fd)), but its usually
+the fastest backend for a low number of fds.</p>
+ </dd>
+ <dt><code>EVBACKEND_POLL</code> (value 2, poll backend, available everywhere except on windows)</dt>
+ <dd>
+ <p>And this is your standard poll(2) backend. It's more complicated than
+select, but handles sparse fds better and has no artificial limit on the
+number of fds you can use (except it will slow down considerably with a
+lot of inactive fds). It scales similarly to select, i.e. O(total_fds).</p>
+ </dd>
+ <dt><code>EVBACKEND_EPOLL</code> (value 4, Linux)</dt>
+ <dd>
+ <p>For few fds, this backend is a bit little slower than poll and select,
+but it scales phenomenally better. While poll and select usually scale like
+O(total_fds) where n is the total number of fds (or the highest fd), epoll scales
+either O(1) or O(active_fds).</p>
+ <p>While stopping and starting an I/O watcher in the same iteration will
+result in some caching, there is still a syscall per such incident
+(because the fd could point to a different file description now), so its
+best to avoid that. Also, dup()ed file descriptors might not work very
+well if you register events for both fds.</p>
+ <p>Please note that epoll sometimes generates spurious notifications, so you
+need to use non-blocking I/O or other means to avoid blocking when no data
+(or space) is available.</p>
+ </dd>
+ <dt><code>EVBACKEND_KQUEUE</code> (value 8, most BSD clones)</dt>
+ <dd>
+ <p>Kqueue deserves special mention, as at the time of this writing, it
+was broken on all BSDs except NetBSD (usually it doesn't work with
+anything but sockets and pipes, except on Darwin, where of course its
+completely useless). For this reason its not being "autodetected"
+unless you explicitly specify it explicitly in the flags (i.e. using
+<code>EVBACKEND_KQUEUE</code>).</p>
+ <p>It scales in the same way as the epoll backend, but the interface to the
+kernel is more efficient (which says nothing about its actual speed, of
+course). While starting and stopping an I/O watcher does not cause an
+extra syscall as with epoll, it still adds up to four event changes per
+incident, so its best to avoid that.</p>
+ </dd>
+ <dt><code>EVBACKEND_DEVPOLL</code> (value 16, Solaris 8)</dt>