|
|
|
@ -2406,6 +2406,12 @@ And a \fIev_cpp.C\fR implementation file that contains libev proper and is compi |
|
|
|
|
In this section the complexities of (many of) the algorithms used inside |
|
|
|
|
libev will be explained. For complexity discussions about backends see the |
|
|
|
|
documentation for \f(CW\*(C`ev_default_init\*(C'\fR. |
|
|
|
|
.Sp |
|
|
|
|
All of the following are about amortised time: If an array needs to be |
|
|
|
|
extended, libev needs to realloc and move the whole array, but this |
|
|
|
|
happens asymptotically never with higher number of elements, so O(1) might |
|
|
|
|
mean it might do a lengthy realloc operation in rare cases, but on average |
|
|
|
|
it is much faster and asymptotically approaches constant time. |
|
|
|
|
.RS 4 |
|
|
|
|
.IP "Starting and stopping timer/periodic watchers: O(log skipped_other_timers)" 4 |
|
|
|
|
.IX Item "Starting and stopping timer/periodic watchers: O(log skipped_other_timers)" |
|
|
|
@ -2418,16 +2424,10 @@ That means that for changing a timer costs less than removing/adding them |
|
|
|
|
as only the relative motion in the event queue has to be paid for. |
|
|
|
|
.IP "Starting io/check/prepare/idle/signal/child watchers: O(1)" 4 |
|
|
|
|
.IX Item "Starting io/check/prepare/idle/signal/child watchers: O(1)" |
|
|
|
|
These just add the watcher into an array or at the head of a list. If |
|
|
|
|
the array needs to be extended libev needs to realloc and move the whole |
|
|
|
|
array, but this happen asymptotically less and less with more watchers, |
|
|
|
|
thus amortised O(1). |
|
|
|
|
.IP "Stopping check/prepare/idle watchers: O(1)" 4 |
|
|
|
|
.IX Item "Stopping check/prepare/idle watchers: O(1)" |
|
|
|
|
.PD 0 |
|
|
|
|
These just add the watcher into an array or at the head of a list. |
|
|
|
|
=item Stopping check/prepare/idle watchers: O(1) |
|
|
|
|
.IP "Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % \s-1EV_PID_HASHSIZE\s0))" 4 |
|
|
|
|
.IX Item "Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % EV_PID_HASHSIZE))" |
|
|
|
|
.PD |
|
|
|
|
These watchers are stored in lists then need to be walked to find the |
|
|
|
|
correct watcher to remove. The lists are usually short (you don't usually |
|
|
|
|
have many watchers waiting for the same fd or signal). |
|
|
|
|