ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.pod
(Generate patch)

Comparing libev/ev.pod (file contents):
Revision 1.93 by root, Fri Dec 21 01:29:34 2007 UTC vs.
Revision 1.94 by root, Fri Dec 21 04:38:45 2007 UTC

313lot of inactive fds). It scales similarly to select, i.e. O(total_fds). 313lot of inactive fds). It scales similarly to select, i.e. O(total_fds).
314 314
315=item C<EVBACKEND_EPOLL> (value 4, Linux) 315=item C<EVBACKEND_EPOLL> (value 4, Linux)
316 316
317For few fds, this backend is a bit little slower than poll and select, 317For few fds, this backend is a bit little slower than poll and select,
318but it scales phenomenally better. While poll and select usually scale like 318but it scales phenomenally better. While poll and select usually scale
319O(total_fds) where n is the total number of fds (or the highest fd), epoll scales 319like O(total_fds) where n is the total number of fds (or the highest fd),
320either O(1) or O(active_fds). 320epoll scales either O(1) or O(active_fds). The epoll design has a number
321of shortcomings, such as silently dropping events in some hard-to-detect
322cases and rewuiring a syscall per fd change, no fork support and bad
323support for dup:
321 324
322While stopping and starting an I/O watcher in the same iteration will 325While stopping, setting and starting an I/O watcher in the same iteration
323result in some caching, there is still a syscall per such incident 326will result in some caching, there is still a syscall per such incident
324(because the fd could point to a different file description now), so its 327(because the fd could point to a different file description now), so its
325best to avoid that. Also, dup()ed file descriptors might not work very 328best to avoid that. Also, C<dup ()>'ed file descriptors might not work
326well if you register events for both fds. 329very well if you register events for both fds.
327 330
328Please note that epoll sometimes generates spurious notifications, so you 331Please note that epoll sometimes generates spurious notifications, so you
329need to use non-blocking I/O or other means to avoid blocking when no data 332need to use non-blocking I/O or other means to avoid blocking when no data
330(or space) is available. 333(or space) is available.
331 334
332=item C<EVBACKEND_KQUEUE> (value 8, most BSD clones) 335=item C<EVBACKEND_KQUEUE> (value 8, most BSD clones)
333 336
334Kqueue deserves special mention, as at the time of this writing, it 337Kqueue deserves special mention, as at the time of this writing, it
335was broken on all BSDs except NetBSD (usually it doesn't work with 338was broken on I<all> BSDs (usually it doesn't work with anything but
336anything but sockets and pipes, except on Darwin, where of course it's 339sockets and pipes, except on Darwin, where of course it's completely
340useless. On NetBSD, it seems to work for all the FD types I tested, so it
337completely useless). For this reason it's not being "autodetected" 341is used by default there). For this reason it's not being "autodetected"
338unless you explicitly specify it explicitly in the flags (i.e. using 342unless you explicitly specify it explicitly in the flags (i.e. using
339C<EVBACKEND_KQUEUE>). 343C<EVBACKEND_KQUEUE>) or libev was compiled on a known-to-be-good (-enough)
344system like NetBSD.
340 345
341It scales in the same way as the epoll backend, but the interface to the 346It scales in the same way as the epoll backend, but the interface to the
342kernel is more efficient (which says nothing about its actual speed, of 347kernel is more efficient (which says nothing about its actual speed,
343course). While starting and stopping an I/O watcher does not cause an 348of course). While stopping, setting and starting an I/O watcher does
344extra syscall as with epoll, it still adds up to four event changes per 349never cause an extra syscall as with epoll, it still adds up to two event
345incident, so its best to avoid that. 350changes per incident, support for C<fork ()> is very bad and it drops fds
351silently in similarly hard-to-detetc cases.
346 352
347=item C<EVBACKEND_DEVPOLL> (value 16, Solaris 8) 353=item C<EVBACKEND_DEVPOLL> (value 16, Solaris 8)
348 354
349This is not implemented yet (and might never be). 355This is not implemented yet (and might never be).
350 356
351=item C<EVBACKEND_PORT> (value 32, Solaris 10) 357=item C<EVBACKEND_PORT> (value 32, Solaris 10)
352 358
353This uses the Solaris 10 port mechanism. As with everything on Solaris, 359This uses the Solaris 10 event port mechanism. As with everything on Solaris,
354it's really slow, but it still scales very well (O(active_fds)). 360it's really slow, but it still scales very well (O(active_fds)).
355 361
356Please note that solaris ports can result in a lot of spurious 362Please note that solaris event ports can deliver a lot of spurious
357notifications, so you need to use non-blocking I/O or other means to avoid 363notifications, so you need to use non-blocking I/O or other means to avoid
358blocking when no data (or space) is available. 364blocking when no data (or space) is available.
359 365
360=item C<EVBACKEND_ALL> 366=item C<EVBACKEND_ALL>
361 367
924such as poll (fortunately in our Xlib example, Xlib already does this on 930such as poll (fortunately in our Xlib example, Xlib already does this on
925its own, so its quite safe to use). 931its own, so its quite safe to use).
926 932
927=head3 The special problem of disappearing file descriptors 933=head3 The special problem of disappearing file descriptors
928 934
929Some backends (e.g kqueue, epoll) need to be told about closing a file 935Some backends (e.g. kqueue, epoll) need to be told about closing a file
930descriptor (either by calling C<close> explicitly or by any other means, 936descriptor (either by calling C<close> explicitly or by any other means,
931such as C<dup>). The reason is that you register interest in some file 937such as C<dup>). The reason is that you register interest in some file
932descriptor, but when it goes away, the operating system will silently drop 938descriptor, but when it goes away, the operating system will silently drop
933this interest. If another file descriptor with the same number then is 939this interest. If another file descriptor with the same number then is
934registered with libev, there is no efficient way to see that this is, in 940registered with libev, there is no efficient way to see that this is, in
942descriptor even if the file descriptor number itself did not change. 948descriptor even if the file descriptor number itself did not change.
943 949
944This is how one would do it normally anyway, the important point is that 950This is how one would do it normally anyway, the important point is that
945the libev application should not optimise around libev but should leave 951the libev application should not optimise around libev but should leave
946optimisations to libev. 952optimisations to libev.
953
954=head3 Ths special problem of dup'ed file descriptors
955
956Some backends (e.g. epoll), cannot register events for file descriptors,
957but only events for the underlying file descriptions. That menas when you
958have C<dup ()>'ed file descriptors and register events for them, only one
959file descriptor might actually receive events.
960
961There is no workaorund possible except not registering events
962for potentially C<dup ()>'ed file descriptors or to resort to
963C<EVBACKEND_SELECT> or C<EVBACKEND_POLL>.
964
965=head3 The special problem of fork
966
967Some backends (epoll, kqueue) do not support C<fork ()> at all or exhibit
968useless behaviour. Libev fully supports fork, but needs to be told about
969it in the child.
970
971To support fork in your programs, you either have to call
972C<ev_default_fork ()> or C<ev_loop_fork ()> after a fork in the child,
973enable C<EVFLAG_FORKCHECK>, or resort to C<EVBACKEND_SELECT> or
974C<EVBACKEND_POLL>.
947 975
948 976
949=head3 Watcher-Specific Functions 977=head3 Watcher-Specific Functions
950 978
951=over 4 979=over 4
1706=head2 C<ev_embed> - when one backend isn't enough... 1734=head2 C<ev_embed> - when one backend isn't enough...
1707 1735
1708This is a rather advanced watcher type that lets you embed one event loop 1736This is a rather advanced watcher type that lets you embed one event loop
1709into another (currently only C<ev_io> events are supported in the embedded 1737into another (currently only C<ev_io> events are supported in the embedded
1710loop, other types of watchers might be handled in a delayed or incorrect 1738loop, other types of watchers might be handled in a delayed or incorrect
1711fashion and must not be used). 1739fashion and must not be used). (See portability notes, below).
1712 1740
1713There are primarily two reasons you would want that: work around bugs and 1741There are primarily two reasons you would want that: work around bugs and
1714prioritise I/O. 1742prioritise I/O.
1715 1743
1716As an example for a bug workaround, the kqueue backend might only support 1744As an example for a bug workaround, the kqueue backend might only support
1771 ev_embed_start (loop_hi, &embed); 1799 ev_embed_start (loop_hi, &embed);
1772 } 1800 }
1773 else 1801 else
1774 loop_lo = loop_hi; 1802 loop_lo = loop_hi;
1775 1803
1804=head2 Portability notes
1805
1806Kqueue is nominally embeddable, but this is broken on all BSDs that I
1807tried, in various ways. Usually the embedded event loop will simply never
1808receive events, sometimes it will only trigger a few times, sometimes in a
1809loop. Epoll is also nominally embeddable, but many Linux kernel versions
1810will always eport the epoll fd as ready, even when no events are pending.
1811
1812While libev allows embedding these backends (they are contained in
1813C<ev_embeddable_backends ()>), take extreme care that it will actually
1814work.
1815
1816When in doubt, create a dynamic event loop forced to use sockets (this
1817usually works) and possibly another thread and a pipe or so to report to
1818your main event loop.
1819
1776=head3 Watcher-Specific Functions and Data Members 1820=head3 Watcher-Specific Functions and Data Members
1777 1821
1778=over 4 1822=over 4
1779 1823
1780=item ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop) 1824=item ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines