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

Comparing libev/ev.pod (file contents):
Revision 1.164 by root, Sat May 31 23:22:23 2008 UTC vs.
Revision 1.173 by root, Thu Aug 7 19:24:56 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
1559handler, you can override it easily by installing your own handler for 1569handler, you can override it easily by installing your own handler for
1560C<SIGCHLD> after initialising the default loop, and making sure the 1570C<SIGCHLD> after initialising the default loop, and making sure the
1561default loop never gets destroyed. You are encouraged, however, to use an 1571default loop never gets destroyed. You are encouraged, however, to use an
1562event-based approach to child reaping and thus use libev's support for 1572event-based approach to child reaping and thus use libev's support for
1563that, so other libev users can use C<ev_child> watchers freely. 1573that, so other libev users can use C<ev_child> watchers freely.
1574
1575=head3 Stopping the Child Watcher
1576
1577Currently, the child watcher never gets stopped, even when the
1578child terminates, so normally one needs to stop the watcher in the
1579callback. Future versions of libev might stop the watcher automatically
1580when a child exit is detected.
1564 1581
1565=head3 Watcher-Specific Functions and Data Members 1582=head3 Watcher-Specific Functions and Data Members
1566 1583
1567=over 4 1584=over 4
1568 1585
1662will be no polling. 1679will be no polling.
1663 1680
1664=head3 ABI Issues (Largefile Support) 1681=head3 ABI Issues (Largefile Support)
1665 1682
1666Libev by default (unless the user overrides this) uses the default 1683Libev by default (unless the user overrides this) uses the default
1667compilation environment, which means that on systems with optionally 1684compilation environment, which means that on systems with large file
1668disabled large file support, you get the 32 bit version of the stat 1685support disabled by default, you get the 32 bit version of the stat
1669structure. When using the library from programs that change the ABI to 1686structure. 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 1687use 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 1688compile 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 1689obviously the case with any flags that change the ABI, but the problem is
1673most noticeably with ev_stat and large file support. 1690most noticeably disabled with ev_stat and large file support.
1691
1692The solution for this is to lobby your distribution maker to make large
1693file interfaces available by default (as e.g. FreeBSD does) and not
1694optional. Libev cannot simply switch on large file support because it has
1695to exchange stat structures with application programs compiled using the
1696default compilation environment.
1674 1697
1675=head3 Inotify 1698=head3 Inotify
1676 1699
1677When C<inotify (7)> support has been compiled into libev (generally only 1700When 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 1701available on Linux) and present at runtime, it will be used to speed up
2626libev. EV is developed together with libev. Apart from the EV core module, 2649libev. EV is developed together with libev. Apart from the EV core module,
2627there are additional modules that implement libev-compatible interfaces 2650there are additional modules that implement libev-compatible interfaces
2628to C<libadns> (C<EV::ADNS>), C<Net::SNMP> (C<Net::SNMP::EV>) and the 2651to C<libadns> (C<EV::ADNS>), C<Net::SNMP> (C<Net::SNMP::EV>) and the
2629C<libglib> event core (C<Glib::EV> and C<EV::Glib>). 2652C<libglib> event core (C<Glib::EV> and C<EV::Glib>).
2630 2653
2631It can be found and installed via CPAN, its homepage is found at 2654It can be found and installed via CPAN, its homepage is at
2632L<http://software.schmorp.de/pkg/EV>. 2655L<http://software.schmorp.de/pkg/EV>.
2656
2657=item Python
2658
2659Python bindings can be found at L<http://code.google.com/p/pyev/>. It
2660seems to be quite complete and well-documented. Note, however, that the
2661patch they require for libev is outright dangerous as it breaks the ABI
2662for everybody else, and therefore, should never be applied in an installed
2663libev (if python requires an incompatible ABI then it needs to embed
2664libev).
2633 2665
2634=item Ruby 2666=item Ruby
2635 2667
2636Tony Arcieri has written a ruby extension that offers access to a subset 2668Tony Arcieri has written a ruby extension that offers access to a subset
2637of the libev API and adds file handle abstractions, asynchronous DNS and 2669of the libev API and adds file handle abstractions, asynchronous DNS and
2639L<http://rev.rubyforge.org/>. 2671L<http://rev.rubyforge.org/>.
2640 2672
2641=item D 2673=item D
2642 2674
2643Leandro Lucarella has written a D language binding (F<ev.d>) for libev, to 2675Leandro Lucarella has written a D language binding (F<ev.d>) for libev, to
2644be found at L<http://git.llucax.com.ar/?p=software/ev.d.git;a=summary>. 2676be found at L<http://proj.llucax.com.ar/wiki/evd>.
2645 2677
2646=back 2678=back
2647 2679
2648 2680
2649=head1 MACRO MAGIC 2681=head1 MACRO MAGIC
3173parallel from multiple threads, calls with the same loop parameter must be 3205parallel from multiple threads, calls with the same loop parameter must be
3174done serially (but can be done from different threads, as long as only one 3206done serially (but can be done from different threads, as long as only one
3175thread ever is inside a call at any point in time, e.g. by using a mutex 3207thread ever is inside a call at any point in time, e.g. by using a mutex
3176per loop). 3208per loop).
3177 3209
3178If you want to know which design is best for your problem, then I cannot 3210If you want to know which design (one loop, locking, or multiple loops
3179help you but by giving some generic advice: 3211without or something else still) is best for your problem, then I cannot
3212help you. I can give some generic advice however:
3180 3213
3181=over 4 3214=over 4
3182 3215
3183=item * most applications have a main thread: use the default libev loop 3216=item * most applications have a main thread: use the default libev loop
3184in that thread, or create a separate thread running only the default loop. 3217in that thread, or create a separate thread running only the default loop.
3317more than a hundred or so sockets, then likely it needs to use a totally 3350more than a hundred or so sockets, then likely it needs to use a totally
3318different implementation for windows, as libev offers the POSIX readiness 3351different implementation for windows, as libev offers the POSIX readiness
3319notification model, which cannot be implemented efficiently on windows 3352notification model, which cannot be implemented efficiently on windows
3320(Microsoft monopoly games). 3353(Microsoft monopoly games).
3321 3354
3355A typical way to use libev under windows is to embed it (see the embedding
3356section for details) and use the following F<evwrap.h> header file instead
3357of F<ev.h>:
3358
3359 #define EV_STANDALONE /* keeps ev from requiring config.h */
3360 #define EV_SELECT_IS_WINSOCKET 1 /* configure libev for windows select */
3361
3362 #include "ev.h"
3363
3364And compile the following F<evwrap.c> file into your project (make sure
3365you do I<not> compile the F<ev.c> or any other embedded soruce files!):
3366
3367 #include "evwrap.h"
3368 #include "ev.c"
3369
3322=over 4 3370=over 4
3323 3371
3324=item The winsocket select function 3372=item The winsocket select function
3325 3373
3326The winsocket C<select> function doesn't follow POSIX in that it 3374The winsocket C<select> function doesn't follow POSIX in that it
3327requires socket I<handles> and not socket I<file descriptors> (it is 3375requires socket I<handles> and not socket I<file descriptors> (it is
3328also extremely buggy). This makes select very inefficient, and also 3376also extremely buggy). This makes select very inefficient, and also
3329requires a mapping from file descriptors to socket handles. See the 3377requires a mapping from file descriptors to socket handles (the Microsoft
3378C runtime provides the function C<_open_osfhandle> for this). See the
3330discussion of the C<EV_SELECT_USE_FD_SET>, C<EV_SELECT_IS_WINSOCKET> and 3379discussion of the C<EV_SELECT_USE_FD_SET>, C<EV_SELECT_IS_WINSOCKET> and
3331C<EV_FD_TO_WIN32_HANDLE> preprocessor symbols for more info. 3380C<EV_FD_TO_WIN32_HANDLE> preprocessor symbols for more info.
3332 3381
3333The configuration for a "naked" win32 using the Microsoft runtime 3382The configuration for a "naked" win32 using the Microsoft runtime
3334libraries and raw winsocket select is: 3383libraries and raw winsocket select is:
3374In addition to a working ISO-C implementation, libev relies on a few 3423In addition to a working ISO-C implementation, libev relies on a few
3375additional extensions: 3424additional extensions:
3376 3425
3377=over 4 3426=over 4
3378 3427
3428=item C<void (*)(ev_watcher_type *, int revents)> must have compatible
3429calling conventions regardless of C<ev_watcher_type *>.
3430
3431Libev assumes not only that all watcher pointers have the same internal
3432structure (guaranteed by POSIX but not by ISO C for example), but it also
3433assumes that the same (machine) code can be used to call any watcher
3434callback: The watcher callbacks have different type signatures, but libev
3435calls them using an C<ev_watcher *> internally.
3436
3379=item C<sig_atomic_t volatile> must be thread-atomic as well 3437=item C<sig_atomic_t volatile> must be thread-atomic as well
3380 3438
3381The type C<sig_atomic_t volatile> (or whatever is defined as 3439The type C<sig_atomic_t volatile> (or whatever is defined as
3382C<EV_ATOMIC_T>) must be atomic w.r.t. accesses from different 3440C<EV_ATOMIC_T>) must be atomic w.r.t. accesses from different
3383threads. This is not part of the specification for C<sig_atomic_t>, but is 3441threads. This is not part of the specification for C<sig_atomic_t>, but is

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines