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

Comparing libev/ev.pod (file contents):
Revision 1.374 by sf-exg, Sat Jun 4 16:54:59 2011 UTC vs.
Revision 1.375 by root, Mon Jun 13 09:52:36 2011 UTC

608among the OS-specific backends (I vastly prefer correctness over speed 608among the OS-specific backends (I vastly prefer correctness over speed
609hacks). 609hacks).
610 610
611On the negative side, the interface is I<bizarre> - so bizarre that 611On the negative side, the interface is I<bizarre> - so bizarre that
612even sun itself gets it wrong in their code examples: The event polling 612even sun itself gets it wrong in their code examples: The event polling
613function sometimes returning events to the caller even though an error 613function sometimes returns events to the caller even though an error
614occurred, but with no indication whether it has done so or not (yes, it's 614occurred, but with no indication whether it has done so or not (yes, it's
615even documented that way) - deadly for edge-triggered interfaces where 615even documented that way) - deadly for edge-triggered interfaces where you
616you absolutely have to know whether an event occurred or not because you 616absolutely have to know whether an event occurred or not because you have
617have to re-arm the watcher. 617to re-arm the watcher.
618 618
619Fortunately libev seems to be able to work around these idiocies. 619Fortunately libev seems to be able to work around these idiocies.
620 620
621This backend maps C<EV_READ> and C<EV_WRITE> in the same way as 621This backend maps C<EV_READ> and C<EV_WRITE> in the same way as
622C<EVBACKEND_POLL>. 622C<EVBACKEND_POLL>.
2023keep up with the timer (because it takes longer than those 10 seconds to 2023keep up with the timer (because it takes longer than those 10 seconds to
2024do stuff) the timer will not fire more than once per event loop iteration. 2024do stuff) the timer will not fire more than once per event loop iteration.
2025 2025
2026=item ev_timer_again (loop, ev_timer *) 2026=item ev_timer_again (loop, ev_timer *)
2027 2027
2028This will act as if the timer timed out and restart it again if it is 2028This will act as if the timer timed out and restarts it again if it is
2029repeating. The exact semantics are: 2029repeating. The exact semantics are:
2030 2030
2031If the timer is pending, its pending status is cleared. 2031If the timer is pending, its pending status is cleared.
2032 2032
2033If the timer is started but non-repeating, stop it (as if it timed out). 2033If the timer is started but non-repeating, stop it (as if it timed out).
3220C<ev_async_sent> calls). In fact, you could use signal watchers as a kind 3220C<ev_async_sent> calls). In fact, you could use signal watchers as a kind
3221of "global async watchers" by using a watcher on an otherwise unused 3221of "global async watchers" by using a watcher on an otherwise unused
3222signal, and C<ev_feed_signal> to signal this watcher from another thread, 3222signal, and C<ev_feed_signal> to signal this watcher from another thread,
3223even without knowing which loop owns the signal. 3223even without knowing which loop owns the signal.
3224 3224
3225Unlike C<ev_signal> watchers, C<ev_async> works with any event loop, not
3226just the default loop.
3227
3228=head3 Queueing 3225=head3 Queueing
3229 3226
3230C<ev_async> does not support queueing of data in any way. The reason 3227C<ev_async> does not support queueing of data in any way. The reason
3231is that the author does not know of a simple (or any) algorithm for a 3228is that the author does not know of a simple (or any) algorithm for a
3232multiple-writer-single-reader queue that works in all cases and doesn't 3229multiple-writer-single-reader queue that works in all cases and doesn't
3331Unlike C<ev_feed_event>, this call is safe to do from other threads, 3328Unlike C<ev_feed_event>, this call is safe to do from other threads,
3332signal or similar contexts (see the discussion of C<EV_ATOMIC_T> in the 3329signal or similar contexts (see the discussion of C<EV_ATOMIC_T> in the
3333embedding section below on what exactly this means). 3330embedding section below on what exactly this means).
3334 3331
3335Note that, as with other watchers in libev, multiple events might get 3332Note that, as with other watchers in libev, multiple events might get
3336compressed into a single callback invocation (another way to look at this 3333compressed into a single callback invocation (another way to look at
3337is that C<ev_async> watchers are level-triggered, set on C<ev_async_send>, 3334this is that C<ev_async> watchers are level-triggered: they are set on
3338reset when the event loop detects that). 3335C<ev_async_send>, reset when the event loop detects that).
3339 3336
3340This call incurs the overhead of a system call only once per event loop 3337This call incurs the overhead of at most one extra system call per event
3341iteration, so while the overhead might be noticeable, it doesn't apply to 3338loop iteration, if the event loop is blocked, and no syscall at all if
3342repeated calls to C<ev_async_send> for the same event loop. 3339the event loop (or your program) is processing events. That means that
3340repeated calls are basically free (there is no need to avoid calls for
3341performance reasons) and that the overhead becomes smaller (typically
3342zero) under load.
3343 3343
3344=item bool = ev_async_pending (ev_async *) 3344=item bool = ev_async_pending (ev_async *)
3345 3345
3346Returns a non-zero value when C<ev_async_send> has been called on the 3346Returns a non-zero value when C<ev_async_send> has been called on the
3347watcher but the event has not yet been processed (or even noted) by the 3347watcher but the event has not yet been processed (or even noted) by the
4369indicate GNU/Linux + Glibc 2.4 or newer, otherwise disabled. 4369indicate GNU/Linux + Glibc 2.4 or newer, otherwise disabled.
4370 4370
4371=item EV_ATOMIC_T 4371=item EV_ATOMIC_T
4372 4372
4373Libev requires an integer type (suitable for storing C<0> or C<1>) whose 4373Libev requires an integer type (suitable for storing C<0> or C<1>) whose
4374access is atomic with respect to other threads or signal contexts. No such 4374access is atomic and serialised with respect to other threads or signal
4375type is easily found in the C language, so you can provide your own type 4375contexts. No such type is easily found in the C language, so you can
4376that you know is safe for your purposes. It is used both for signal handler "locking" 4376provide your own type that you know is safe for your purposes. It is used
4377as well as for signal and thread safety in C<ev_async> watchers. 4377both for signal handler "locking" as well as for signal and thread safety
4378in C<ev_async> watchers.
4378 4379
4379In the absence of this define, libev will use C<sig_atomic_t volatile> 4380In the absence of this define, libev will use C<sig_atomic_t volatile>
4380(from F<signal.h>), which is usually good enough on most platforms. 4381(from F<signal.h>), which is usually good enough on most platforms.
4381 4382
4382=item EV_H (h) 4383=item EV_H (h)
5120=item Processing ev_async_send: O(number_of_async_watchers) 5121=item Processing ev_async_send: O(number_of_async_watchers)
5121 5122
5122=item Processing signals: O(max_signal_number) 5123=item Processing signals: O(max_signal_number)
5123 5124
5124Sending involves a system call I<iff> there were no other C<ev_async_send> 5125Sending involves a system call I<iff> there were no other C<ev_async_send>
5125calls in the current loop iteration. Checking for async and signal events 5126calls in the current loop iteration and the loop is currently
5127blocked. Checking for async and signal events involves iterating over all
5126involves iterating over all running async watchers or all signal numbers. 5128running async watchers or all signal numbers.
5127 5129
5128=back 5130=back
5129 5131
5130 5132
5131=head1 PORTING FROM LIBEV 3.X TO 4.X 5133=head1 PORTING FROM LIBEV 3.X TO 4.X

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines