… | |
… | |
64 | |
64 | |
65 | =head1 DESCRIPTION |
65 | =head1 DESCRIPTION |
66 | |
66 | |
67 | The newest version of this document is also available as an html-formatted |
67 | The newest version of this document is also available as an html-formatted |
68 | web page you might find easier to navigate when reading it for the first |
68 | web page you might find easier to navigate when reading it for the first |
69 | time: L<http://cvs.schmorp.de/libev/ev.html>. |
69 | time: L<http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod>. |
70 | |
70 | |
71 | Libev is an event loop: you register interest in certain events (such as a |
71 | Libev is an event loop: you register interest in certain events (such as a |
72 | file descriptor being readable or a timeout occurring), and it will manage |
72 | file descriptor being readable or a timeout occurring), and it will manage |
73 | these event sources and provide your program with events. |
73 | these event sources and provide your program with events. |
74 | |
74 | |
… | |
… | |
2980 | defined to be C<0>, then they are not. |
2980 | defined to be C<0>, then they are not. |
2981 | |
2981 | |
2982 | =item EV_MINIMAL |
2982 | =item EV_MINIMAL |
2983 | |
2983 | |
2984 | If you need to shave off some kilobytes of code at the expense of some |
2984 | If you need to shave off some kilobytes of code at the expense of some |
2985 | speed, define this symbol to C<1>. Currently only used for gcc to override |
2985 | speed, define this symbol to C<1>. Currently this is used to override some |
2986 | some inlining decisions, saves roughly 30% codesize of amd64. |
2986 | inlining decisions, saves roughly 30% codesize of amd64. It also selects a |
|
|
2987 | much smaller 2-heap for timer management over the default 4-heap. |
2987 | |
2988 | |
2988 | =item EV_PID_HASHSIZE |
2989 | =item EV_PID_HASHSIZE |
2989 | |
2990 | |
2990 | C<ev_child> watchers use a small hash table to distribute workload by |
2991 | C<ev_child> watchers use a small hash table to distribute workload by |
2991 | pid. The default size is C<16> (or C<1> with C<EV_MINIMAL>), usually more |
2992 | pid. The default size is C<16> (or C<1> with C<EV_MINIMAL>), usually more |
… | |
… | |
2997 | C<ev_stat> watchers use a small hash table to distribute workload by |
2998 | C<ev_stat> watchers use a small hash table to distribute workload by |
2998 | inotify watch id. The default size is C<16> (or C<1> with C<EV_MINIMAL>), |
2999 | inotify watch id. The default size is C<16> (or C<1> with C<EV_MINIMAL>), |
2999 | usually more than enough. If you need to manage thousands of C<ev_stat> |
3000 | usually more than enough. If you need to manage thousands of C<ev_stat> |
3000 | watchers you might want to increase this value (I<must> be a power of |
3001 | watchers you might want to increase this value (I<must> be a power of |
3001 | two). |
3002 | two). |
|
|
3003 | |
|
|
3004 | =item EV_USE_4HEAP |
|
|
3005 | |
|
|
3006 | Heaps are not very cache-efficient. To improve the cache-efficiency of the |
|
|
3007 | timer and periodics heap, libev uses a 4-heap when this symbol is defined |
|
|
3008 | to C<1>. The 4-heap uses more complicated (longer) code but has a |
|
|
3009 | noticable after performance with many (thousands) of watchers. |
|
|
3010 | |
|
|
3011 | The default is C<1> unless C<EV_MINIMAL> is set in which case it is C<0> |
|
|
3012 | (disabled). |
|
|
3013 | |
|
|
3014 | =item EV_HEAP_CACHE_AT |
|
|
3015 | |
|
|
3016 | Heaps are not very cache-efficient. To improve the cache-efficiency of the |
|
|
3017 | timer and periodics heap, libev can cache the timestamp (I<at>) within |
|
|
3018 | the heap structure (selected by defining C<EV_HEAP_CACHE_AT> to C<1>), |
|
|
3019 | which uses 8-12 bytes more per watcher and a few hundred bytes more code, |
|
|
3020 | but avoids random read accesses on heap changes. This noticably improves |
|
|
3021 | performance noticably with with many (hundreds) of watchers. |
|
|
3022 | |
|
|
3023 | The default is C<1> unless C<EV_MINIMAL> is set in which case it is C<0> |
|
|
3024 | (disabled). |
3002 | |
3025 | |
3003 | =item EV_COMMON |
3026 | =item EV_COMMON |
3004 | |
3027 | |
3005 | By default, all watchers have a C<void *data> member. By redefining |
3028 | By default, all watchers have a C<void *data> member. By redefining |
3006 | this macro to a something else you can include more and other types of |
3029 | this macro to a something else you can include more and other types of |
… | |
… | |
3176 | correct watcher to remove. The lists are usually short (you don't usually |
3199 | correct watcher to remove. The lists are usually short (you don't usually |
3177 | have many watchers waiting for the same fd or signal). |
3200 | have many watchers waiting for the same fd or signal). |
3178 | |
3201 | |
3179 | =item Finding the next timer in each loop iteration: O(1) |
3202 | =item Finding the next timer in each loop iteration: O(1) |
3180 | |
3203 | |
3181 | By virtue of using a binary heap, the next timer is always found at the |
3204 | By virtue of using a binary or 4-heap, the next timer is always found at a |
3182 | beginning of the storage array. |
3205 | fixed position in the storage array. |
3183 | |
3206 | |
3184 | =item Each change on a file descriptor per loop iteration: O(number_of_watchers_for_this_fd) |
3207 | =item Each change on a file descriptor per loop iteration: O(number_of_watchers_for_this_fd) |
3185 | |
3208 | |
3186 | A change means an I/O watcher gets started or stopped, which requires |
3209 | A change means an I/O watcher gets started or stopped, which requires |
3187 | libev to recalculate its status (and possibly tell the kernel, depending |
3210 | libev to recalculate its status (and possibly tell the kernel, depending |