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

Comparing libev/ev.pod (file contents):
Revision 1.168 by root, Mon Jun 9 14:31:36 2008 UTC vs.
Revision 1.175 by root, Mon Sep 8 16:36:14 2008 UTC

604 604
605Here are the gory details of what C<ev_loop> does: 605Here are the gory details of what C<ev_loop> does:
606 606
607 - Before the first iteration, call any pending watchers. 607 - Before the first iteration, call any pending watchers.
608 * If EVFLAG_FORKCHECK was used, check for a fork. 608 * If EVFLAG_FORKCHECK was used, check for a fork.
609 - If a fork was detected, queue and call all fork watchers. 609 - If a fork was detected (by any means), queue and call all fork watchers.
610 - Queue and call all prepare watchers. 610 - Queue and call all prepare watchers.
611 - If we have been forked, recreate the kernel state. 611 - If we have been forked, detach and recreate the kernel state
612 as to not disturb the other process.
612 - Update the kernel state with all outstanding changes. 613 - Update the kernel state with all outstanding changes.
613 - Update the "event loop time". 614 - Update the "event loop time" (ev_now ()).
614 - Calculate for how long to sleep or block, if at all 615 - Calculate for how long to sleep or block, if at all
615 (active idle watchers, EVLOOP_NONBLOCK or not having 616 (active idle watchers, EVLOOP_NONBLOCK or not having
616 any active watchers at all will result in not sleeping). 617 any active watchers at all will result in not sleeping).
617 - Sleep if the I/O and timer collect interval say so. 618 - Sleep if the I/O and timer collect interval say so.
618 - Block the process, waiting for any events. 619 - Block the process, waiting for any events.
619 - Queue all outstanding I/O (fd) events. 620 - Queue all outstanding I/O (fd) events.
620 - Update the "event loop time" and do time jump handling. 621 - Update the "event loop time" (ev_now ()), and do time jump adjustments.
621 - Queue all outstanding timers. 622 - Queue all outstanding timers.
622 - Queue all outstanding periodics. 623 - Queue all outstanding periodics.
623 - If no events are pending now, queue all idle watchers. 624 - Unless any events are pending now, queue all idle watchers.
624 - Queue all check watchers. 625 - Queue all check watchers.
625 - Call all queued watchers in reverse order (i.e. check watchers first). 626 - Call all queued watchers in reverse order (i.e. check watchers first).
626 Signals and child watchers are implemented as I/O watchers, and will 627 Signals and child watchers are implemented as I/O watchers, and will
627 be handled here by queueing them when their watcher gets executed. 628 be handled here by queueing them when their watcher gets executed.
628 - If ev_unloop has been called, or EVLOOP_ONESHOT or EVLOOP_NONBLOCK 629 - If ev_unloop has been called, or EVLOOP_ONESHOT or EVLOOP_NONBLOCK
633anymore. 634anymore.
634 635
635 ... queue jobs here, make sure they register event watchers as long 636 ... queue jobs here, make sure they register event watchers as long
636 ... as they still have work to do (even an idle watcher will do..) 637 ... as they still have work to do (even an idle watcher will do..)
637 ev_loop (my_loop, 0); 638 ev_loop (my_loop, 0);
638 ... jobs done. yeah! 639 ... jobs done or somebody called unloop. yeah!
639 640
640=item ev_unloop (loop, how) 641=item ev_unloop (loop, how)
641 642
642Can be used to make a call to C<ev_loop> return early (but only after it 643Can be used to make a call to C<ev_loop> return early (but only after it
643has processed all outstanding events). The C<how> argument must be either 644has processed all outstanding events). The C<how> argument must be either
679=item ev_set_io_collect_interval (loop, ev_tstamp interval) 680=item ev_set_io_collect_interval (loop, ev_tstamp interval)
680 681
681=item ev_set_timeout_collect_interval (loop, ev_tstamp interval) 682=item ev_set_timeout_collect_interval (loop, ev_tstamp interval)
682 683
683These advanced functions influence the time that libev will spend waiting 684These advanced functions influence the time that libev will spend waiting
684for events. Both are by default C<0>, meaning that libev will try to 685for events. Both time intervals are by default C<0>, meaning that libev
685invoke timer/periodic callbacks and I/O callbacks with minimum latency. 686will try to invoke timer/periodic callbacks and I/O callbacks with minimum
687latency.
686 688
687Setting these to a higher value (the C<interval> I<must> be >= C<0>) 689Setting these to a higher value (the C<interval> I<must> be >= C<0>)
688allows libev to delay invocation of I/O and timer/periodic callbacks to 690allows libev to delay invocation of I/O and timer/periodic callbacks
689increase efficiency of loop iterations. 691to increase efficiency of loop iterations (or to increase power-saving
692opportunities).
690 693
691The background is that sometimes your program runs just fast enough to 694The background is that sometimes your program runs just fast enough to
692handle one (or very few) event(s) per loop iteration. While this makes 695handle one (or very few) event(s) per loop iteration. While this makes
693the program responsive, it also wastes a lot of CPU time to poll for new 696the program responsive, it also wastes a lot of CPU time to poll for new
694events, especially with backends like C<select ()> which have a high 697events, especially with backends like C<select ()> which have a high
709Many (busy) programs can usually benefit by setting the I/O collect 712Many (busy) programs can usually benefit by setting the I/O collect
710interval to a value near C<0.1> or so, which is often enough for 713interval to a value near C<0.1> or so, which is often enough for
711interactive servers (of course not for games), likewise for timeouts. It 714interactive servers (of course not for games), likewise for timeouts. It
712usually doesn't make much sense to set it to a lower value than C<0.01>, 715usually doesn't make much sense to set it to a lower value than C<0.01>,
713as this approaches the timing granularity of most systems. 716as this approaches the timing granularity of most systems.
717
718Setting the I<timeout collect interval> can improve the opportunity for
719saving power, as the program will "bundle" timer callback invocations that
720are "near" in time together, by delaying some, thus reducing the number of
721times the process sleeps and wakes up again. Another useful technique to
722reduce iterations/wake-ups is to use C<ev_periodic> watchers and make sure
723they fire on, say, one-second boundaries only.
714 724
715=item ev_loop_verify (loop) 725=item ev_loop_verify (loop)
716 726
717This function only does something when C<EV_VERIFY> support has been 727This function only does something when C<EV_VERIFY> support has been
718compiled in. It tries to go through all internal structures and checks 728compiled in. It tries to go through all internal structures and checks
1124C<EVBACKEND_POLL>. 1134C<EVBACKEND_POLL>.
1125 1135
1126=head3 The special problem of SIGPIPE 1136=head3 The special problem of SIGPIPE
1127 1137
1128While not really specific to libev, it is easy to forget about SIGPIPE: 1138While not really specific to libev, it is easy to forget about SIGPIPE:
1129when reading from a pipe whose other end has been closed, your program 1139when writing to a pipe whose other end has been closed, your program gets
1130gets send a SIGPIPE, which, by default, aborts your program. For most 1140send a SIGPIPE, which, by default, aborts your program. For most programs
1131programs this is sensible behaviour, for daemons, this is usually 1141this is sensible behaviour, for daemons, this is usually undesirable.
1132undesirable.
1133 1142
1134So when you encounter spurious, unexplained daemon exits, make sure you 1143So when you encounter spurious, unexplained daemon exits, make sure you
1135ignore SIGPIPE (and maybe make sure you log the exit status of your daemon 1144ignore SIGPIPE (and maybe make sure you log the exit status of your daemon
1136somewhere, as that would have given you a big clue). 1145somewhere, as that would have given you a big clue).
1137 1146
1188times out after an hour and you reset your system clock to January last 1197times out after an hour and you reset your system clock to January last
1189year, it will still time out after (roughly) and hour. "Roughly" because 1198year, it will still time out after (roughly) and hour. "Roughly" because
1190detecting time jumps is hard, and some inaccuracies are unavoidable (the 1199detecting time jumps is hard, and some inaccuracies are unavoidable (the
1191monotonic clock option helps a lot here). 1200monotonic clock option helps a lot here).
1192 1201
1202The callback is guaranteed to be invoked only after its timeout has passed,
1203but if multiple timers become ready during the same loop iteration then
1204order of execution is undefined.
1205
1206=head3 The special problem of time updates
1207
1208Requesting the current time is a costly operation (it usually takes at
1209least two syscalls): EV therefore updates it's idea of the current time
1210only before and after C<ev_loop> polls for new events, which causes the
1211difference between C<ev_now ()> and C<ev_time ()>.
1212
1193The relative timeouts are calculated relative to the C<ev_now ()> 1213The relative timeouts are calculated relative to the C<ev_now ()>
1194time. This is usually the right thing as this timestamp refers to the time 1214time. This is usually the right thing as this timestamp refers to the time
1195of the event triggering whatever timeout you are modifying/starting. If 1215of the event triggering whatever timeout you are modifying/starting. If
1196you suspect event processing to be delayed and you I<need> to base the timeout 1216you suspect event processing to be delayed and you I<need> to base the
1197on the current time, use something like this to adjust for this: 1217timeout on the current time, use something like this to adjust for this:
1198 1218
1199 ev_timer_set (&timer, after + ev_now () - ev_time (), 0.); 1219 ev_timer_set (&timer, after + ev_now () - ev_time (), 0.);
1200
1201The callback is guaranteed to be invoked only after its timeout has passed,
1202but if multiple timers become ready during the same loop iteration then
1203order of execution is undefined.
1204 1220
1205=head3 Watcher-Specific Functions and Data Members 1221=head3 Watcher-Specific Functions and Data Members
1206 1222
1207=over 4 1223=over 4
1208 1224
1559handler, you can override it easily by installing your own handler for 1575handler, you can override it easily by installing your own handler for
1560C<SIGCHLD> after initialising the default loop, and making sure the 1576C<SIGCHLD> after initialising the default loop, and making sure the
1561default loop never gets destroyed. You are encouraged, however, to use an 1577default loop never gets destroyed. You are encouraged, however, to use an
1562event-based approach to child reaping and thus use libev's support for 1578event-based approach to child reaping and thus use libev's support for
1563that, so other libev users can use C<ev_child> watchers freely. 1579that, so other libev users can use C<ev_child> watchers freely.
1580
1581=head3 Stopping the Child Watcher
1582
1583Currently, the child watcher never gets stopped, even when the
1584child terminates, so normally one needs to stop the watcher in the
1585callback. Future versions of libev might stop the watcher automatically
1586when a child exit is detected.
1564 1587
1565=head3 Watcher-Specific Functions and Data Members 1588=head3 Watcher-Specific Functions and Data Members
1566 1589
1567=over 4 1590=over 4
1568 1591
1662will be no polling. 1685will be no polling.
1663 1686
1664=head3 ABI Issues (Largefile Support) 1687=head3 ABI Issues (Largefile Support)
1665 1688
1666Libev by default (unless the user overrides this) uses the default 1689Libev by default (unless the user overrides this) uses the default
1667compilation environment, which means that on systems with optionally 1690compilation environment, which means that on systems with large file
1668disabled large file support, you get the 32 bit version of the stat 1691support disabled by default, you get the 32 bit version of the stat
1669structure. When using the library from programs that change the ABI to 1692structure. When using the library from programs that change the ABI to
1670use 64 bit file offsets the programs will fail. In that case you have to 1693use 64 bit file offsets the programs will fail. In that case you have to
1671compile libev with the same flags to get binary compatibility. This is 1694compile libev with the same flags to get binary compatibility. This is
1672obviously the case with any flags that change the ABI, but the problem is 1695obviously the case with any flags that change the ABI, but the problem is
1673most noticeably with ev_stat and large file support. 1696most noticeably disabled with ev_stat and large file support.
1697
1698The solution for this is to lobby your distribution maker to make large
1699file interfaces available by default (as e.g. FreeBSD does) and not
1700optional. Libev cannot simply switch on large file support because it has
1701to exchange stat structures with application programs compiled using the
1702default compilation environment.
1674 1703
1675=head3 Inotify 1704=head3 Inotify
1676 1705
1677When C<inotify (7)> support has been compiled into libev (generally only 1706When C<inotify (7)> support has been compiled into libev (generally only
1678available on Linux) and present at runtime, it will be used to speed up 1707available on Linux) and present at runtime, it will be used to speed up
2648L<http://rev.rubyforge.org/>. 2677L<http://rev.rubyforge.org/>.
2649 2678
2650=item D 2679=item D
2651 2680
2652Leandro Lucarella has written a D language binding (F<ev.d>) for libev, to 2681Leandro Lucarella has written a D language binding (F<ev.d>) for libev, to
2653be found at L<http://git.llucax.com.ar/?p=software/ev.d.git;a=summary>. 2682be found at L<http://proj.llucax.com.ar/wiki/evd>.
2654 2683
2655=back 2684=back
2656 2685
2657 2686
2658=head1 MACRO MAGIC 2687=head1 MACRO MAGIC
3182parallel from multiple threads, calls with the same loop parameter must be 3211parallel from multiple threads, calls with the same loop parameter must be
3183done serially (but can be done from different threads, as long as only one 3212done serially (but can be done from different threads, as long as only one
3184thread ever is inside a call at any point in time, e.g. by using a mutex 3213thread ever is inside a call at any point in time, e.g. by using a mutex
3185per loop). 3214per loop).
3186 3215
3187If you want to know which design is best for your problem, then I cannot 3216If you want to know which design (one loop, locking, or multiple loops
3188help you but by giving some generic advice: 3217without or something else still) is best for your problem, then I cannot
3218help you. I can give some generic advice however:
3189 3219
3190=over 4 3220=over 4
3191 3221
3192=item * most applications have a main thread: use the default libev loop 3222=item * most applications have a main thread: use the default libev loop
3193in that thread, or create a separate thread running only the default loop. 3223in that thread, or create a separate thread running only the default loop.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines