From 3ed29c5036af830bfd31a743094b587bc6aa1949 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 26 Nov 2007 10:20:42 +0000 Subject: add some small complexities section --- ev.3 | 29 ++++++++++++++++++++++++++++- ev.html | 30 +++++++++++++++++++++++++++++- ev.pod | 29 +++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 2 deletions(-) diff --git a/ev.3 b/ev.3 index db62c5a..c1ac48b 100644 --- a/ev.3 +++ b/ev.3 @@ -1297,11 +1297,12 @@ pseudo-code only of course: \& static ev_timer tw; .Ve .PP -.Vb 8 +.Vb 9 \& static void \& io_cb (ev_loop *loop, ev_io *w, int revents) \& { \& // set the relevant poll flags +\& // could also call adns_processreadable etc. here \& struct pollfd *fd = (struct pollfd *)w->data; \& if (revents & EV_READ ) fd->revents |= fd->events & POLLIN; \& if (revents & EV_WRITE) fd->revents |= fd->events & POLLOUT; @@ -1902,6 +1903,32 @@ And a \fIev_cpp.C\fR implementation file that contains libev proper and is compi \& #include "ev_cpp.h" \& #include "ev.c" .Ve +.SH "COMPLEXITIES" +.IX Header "COMPLEXITIES" +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. +.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)" +.PD 0 +.IP "Changing timer/periodic watchers (by autorepeat, again): O(log skipped_other_timers)" 4 +.IX Item "Changing timer/periodic watchers (by autorepeat, again): O(log skipped_other_timers)" +.IP "Starting io/check/prepare/idle/signal/child watchers: O(1)" 4 +.IX Item "Starting io/check/prepare/idle/signal/child watchers: O(1)" +.IP "Stopping check/prepare/idle watchers: O(1)" 4 +.IX Item "Stopping check/prepare/idle watchers: O(1)" +.IP "Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % 16))" 4 +.IX Item "Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % 16))" +.IP "Finding the next timer per loop iteration: O(1)" 4 +.IX Item "Finding the next timer per loop iteration: O(1)" +.IP "Each change on a file descriptor per loop iteration: O(number_of_watchers_for_this_fd)" 4 +.IX Item "Each change on a file descriptor per loop iteration: O(number_of_watchers_for_this_fd)" +.IP "Activating one watcher: O(1)" 4 +.IX Item "Activating one watcher: O(1)" +.RE +.RS 4 +.PD .SH "AUTHOR" .IX Header "AUTHOR" Marc Lehmann . diff --git a/ev.html b/ev.html index 68db37e..b13b6ae 100644 --- a/ev.html +++ b/ev.html @@ -6,7 +6,7 @@ - + @@ -52,6 +52,7 @@
  • EXAMPLES
  • +
  • COMPLEXITIES
  • AUTHOR

  • @@ -1178,6 +1179,7 @@ pseudo-code only of course:

    io_cb (ev_loop *loop, ev_io *w, int revents) { // set the relevant poll flags + // could also call adns_processreadable etc. here struct pollfd *fd = (struct pollfd *)w->data; if (revents & EV_READ ) fd->revents |= fd->events & POLLIN; if (revents & EV_WRITE) fd->revents |= fd->events & POLLOUT; @@ -1755,8 +1757,34 @@ that everybody includes and which overrides some autoconf choices:

      #include "ev_cpp.h"
       #include "ev.c"
     
    +
    +
    +
     
    + +

    COMPLEXITIES

    Top

    +
    +

    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 ev_default_init.

    +

    +

    +
    Starting and stopping timer/periodic watchers: O(log skipped_other_timers)
    +
    Changing timer/periodic watchers (by autorepeat, again): O(log skipped_other_timers)
    +
    Starting io/check/prepare/idle/signal/child watchers: O(1)
    +
    Stopping check/prepare/idle watchers: O(1)
    +
    Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % 16))
    +
    Finding the next timer per loop iteration: O(1)
    +
    Each change on a file descriptor per loop iteration: O(number_of_watchers_for_this_fd)
    +
    Activating one watcher: O(1)
    +
    +

    + + + + +

    AUTHOR

    Top

    diff --git a/ev.pod b/ev.pod index b988e08..cab6e18 100644 --- a/ev.pod +++ b/ev.pod @@ -1162,6 +1162,7 @@ pseudo-code only of course: io_cb (ev_loop *loop, ev_io *w, int revents) { // set the relevant poll flags + // could also call adns_processreadable etc. here struct pollfd *fd = (struct pollfd *)w->data; if (revents & EV_READ ) fd->revents |= fd->events & POLLIN; if (revents & EV_WRITE) fd->revents |= fd->events & POLLOUT; @@ -1757,6 +1758,34 @@ And a F implementation file that contains libev proper and is compiled #include "ev_cpp.h" #include "ev.c" + +=head1 COMPLEXITIES + +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 C. + +=over 4 + +=item Starting and stopping timer/periodic watchers: O(log skipped_other_timers) + +=item Changing timer/periodic watchers (by autorepeat, again): O(log skipped_other_timers) + +=item Starting io/check/prepare/idle/signal/child watchers: O(1) + +=item Stopping check/prepare/idle watchers: O(1) + +=item Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % 16)) + +=item Finding the next timer per loop iteration: O(1) + +=item Each change on a file descriptor per loop iteration: O(number_of_watchers_for_this_fd) + +=item Activating one watcher: O(1) + +=back + + =head1 AUTHOR Marc Lehmann . -- cgit v1.2.3