summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root>2007-11-26 10:20:42 +0000
committerroot <root>2007-11-26 10:20:42 +0000
commit3ed29c5036af830bfd31a743094b587bc6aa1949 (patch)
tree979c57558625afd6238842bcb6212f82ae991d15
parent0a92349530f48869656f6696a354e308bd233c72 (diff)
add some small complexities section
-rw-r--r--ev.329
-rw-r--r--ev.html30
-rw-r--r--ev.pod29
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 <libev@schmorp.de>.
diff --git a/ev.html b/ev.html
index 68db37e..b13b6ae 100644
--- a/ev.html
+++ b/ev.html
@@ -6,7 +6,7 @@
<meta name="description" content="Pod documentation for libev" />
<meta name="inputfile" content="&lt;standard input&gt;" />
<meta name="outputfile" content="&lt;standard output&gt;" />
- <meta name="created" content="Mon Nov 26 10:52:13 2007" />
+ <meta name="created" content="Mon Nov 26 11:20:35 2007" />
<meta name="generator" content="Pod::Xhtml 1.57" />
<link rel="stylesheet" href="http://res.tst.eu/pod.css"/></head>
<body>
@@ -52,6 +52,7 @@
<li><a href="#EXAMPLES">EXAMPLES</a></li>
</ul>
</li>
+<li><a href="#COMPLEXITIES">COMPLEXITIES</a></li>
<li><a href="#AUTHOR">AUTHOR</a>
</li>
</ul><hr />
@@ -1178,6 +1179,7 @@ pseudo-code only of course:</p>
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-&gt;data;
if (revents &amp; EV_READ ) fd-&gt;revents |= fd-&gt;events &amp; POLLIN;
if (revents &amp; EV_WRITE) fd-&gt;revents |= fd-&gt;events &amp; POLLOUT;
@@ -1755,9 +1757,35 @@ that everybody includes and which overrides some autoconf choices:</p>
<pre> #include &quot;ev_cpp.h&quot;
#include &quot;ev.c&quot;
+
+
+
</pre>
</div>
+<h1 id="COMPLEXITIES">COMPLEXITIES</h1><p><a href="#TOP" class="toplink">Top</a></p>
+<div id="COMPLEXITIES_CONTENT">
+ <p>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 <code>ev_default_init</code>.</p>
+ <p>
+ <dl>
+ <dt>Starting and stopping timer/periodic watchers: O(log skipped_other_timers)</dt>
+ <dt>Changing timer/periodic watchers (by autorepeat, again): O(log skipped_other_timers)</dt>
+ <dt>Starting io/check/prepare/idle/signal/child watchers: O(1)</dt>
+ <dt>Stopping check/prepare/idle watchers: O(1)</dt>
+ <dt>Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % 16))</dt>
+ <dt>Finding the next timer per loop iteration: O(1)</dt>
+ <dt>Each change on a file descriptor per loop iteration: O(number_of_watchers_for_this_fd)</dt>
+ <dt>Activating one watcher: O(1)</dt>
+ </dl>
+ </p>
+
+
+
+
+
+</div>
<h1 id="AUTHOR">AUTHOR</h1><p><a href="#TOP" class="toplink">Top</a></p>
<div id="AUTHOR_CONTENT">
<p>Marc Lehmann &lt;libev@schmorp.de&gt;.</p>
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<ev_cpp.C> 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<ev_default_init>.
+
+=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 <libev@schmorp.de>.