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

Comparing libev/ev.pod (file contents):
Revision 1.124 by root, Fri Feb 1 13:41:03 2008 UTC vs.
Revision 1.129 by root, Tue Feb 5 23:56:33 2008 UTC

2097 { 2097 {
2098 sometype data; 2098 sometype data;
2099 2099
2100 // no locking etc. 2100 // no locking etc.
2101 queue_put (data); 2101 queue_put (data);
2102 ev_async_send (DEFAULT_LOOP, &mysig); 2102 ev_async_send (DEFAULT_ &mysig);
2103 } 2103 }
2104 2104
2105 static void 2105 static void
2106 mysig_cb (EV_P_ ev_async *w, int revents) 2106 mysig_cb (EV_P_ ev_async *w, int revents)
2107 { 2107 {
2138 // only need to lock the actual queueing operation 2138 // only need to lock the actual queueing operation
2139 pthread_mutex_lock (&mymutex); 2139 pthread_mutex_lock (&mymutex);
2140 queue_put (data); 2140 queue_put (data);
2141 pthread_mutex_unlock (&mymutex); 2141 pthread_mutex_unlock (&mymutex);
2142 2142
2143 ev_async_send (DEFAULT_LOOP, &mysig); 2143 ev_async_send (DEFAULT_ &mysig);
2144 } 2144 }
2145 2145
2146 static void 2146 static void
2147 mysig_cb (EV_P_ ev_async *w, int revents) 2147 mysig_cb (EV_P_ ev_async *w, int revents)
2148 { 2148 {
2695be detected at runtime. 2695be detected at runtime.
2696 2696
2697=item EV_ATOMIC_T 2697=item EV_ATOMIC_T
2698 2698
2699Libev requires an integer type (suitable for storing C<0> or C<1>) whose 2699Libev requires an integer type (suitable for storing C<0> or C<1>) whose
2700access is atomic with respect to other threads or signal contexts. No such type 2700access is atomic with respect to other threads or signal contexts. No such
2701is easily found using, so you cna provide your own type that you know is safe. 2701type is easily found in the C language, so you can provide your own type
2702that you know is safe for your purposes. It is used both for signal handler "locking"
2703as well as for signal and thread safety in C<ev_async> watchers.
2702 2704
2703In the absense of this define, libev will use C<sig_atomic_t volatile> 2705In the absense of this define, libev will use C<sig_atomic_t volatile>
2704from F<signal.h>, which is usually good enough on most platforms. 2706(from F<signal.h>), which is usually good enough on most platforms.
2705 2707
2706=item EV_H 2708=item EV_H
2707 2709
2708The name of the F<ev.h> header file used to include it. The default if 2710The name of the F<ev.h> header file used to include it. The default if
2709undefined is C<"ev.h"> in F<event.h>, F<ev.c> and F<ev++.h>. This can be 2711undefined is C<"ev.h"> in F<event.h>, F<ev.c> and F<ev++.h>. This can be
2910=item Changing timer/periodic watchers (by autorepeat or calling again): O(log skipped_other_timers) 2912=item Changing timer/periodic watchers (by autorepeat or calling again): O(log skipped_other_timers)
2911 2913
2912That means that changing a timer costs less than removing/adding them 2914That means that changing a timer costs less than removing/adding them
2913as only the relative motion in the event queue has to be paid for. 2915as only the relative motion in the event queue has to be paid for.
2914 2916
2915=item Starting io/check/prepare/idle/signal/child watchers: O(1) 2917=item Starting io/check/prepare/idle/signal/child/fork/async watchers: O(1)
2916 2918
2917These just add the watcher into an array or at the head of a list. 2919These just add the watcher into an array or at the head of a list.
2918 2920
2919=item Stopping check/prepare/idle watchers: O(1) 2921=item Stopping check/prepare/idle/fork/async watchers: O(1)
2920 2922
2921=item Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % EV_PID_HASHSIZE)) 2923=item Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % EV_PID_HASHSIZE))
2922 2924
2923These watchers are stored in lists then need to be walked to find the 2925These watchers are stored in lists then need to be walked to find the
2924correct watcher to remove. The lists are usually short (you don't usually 2926correct watcher to remove. The lists are usually short (you don't usually
2940=item Priority handling: O(number_of_priorities) 2942=item Priority handling: O(number_of_priorities)
2941 2943
2942Priorities are implemented by allocating some space for each 2944Priorities are implemented by allocating some space for each
2943priority. When doing priority-based operations, libev usually has to 2945priority. When doing priority-based operations, libev usually has to
2944linearly search all the priorities, but starting/stopping and activating 2946linearly search all the priorities, but starting/stopping and activating
2945watchers becomes O(1) w.r.t. prioritiy handling. 2947watchers becomes O(1) w.r.t. priority handling.
2948
2949=item Sending an ev_async: O(1)
2950
2951=item Processing ev_async_send: O(number_of_async_watchers)
2952
2953=item Processing signals: O(max_signal_number)
2954
2955Sending involves a syscall I<iff> there were no other C<ev_async_send>
2956calls in the current loop iteration. Checking for async and signal events
2957involves iterating over all running async watchers or all signal numbers.
2946 2958
2947=back 2959=back
2948 2960
2949 2961
2950=head1 Win32 platform limitations and workarounds 2962=head1 Win32 platform limitations and workarounds

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines