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

Comparing libev/ev.pod (file contents):
Revision 1.170 by root, Sat Jul 5 02:25:40 2008 UTC vs.
Revision 1.171 by root, Tue Jul 8 09:49:15 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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines