Nick Mathewson 693c24ef9d Implement queued timeouts for case where many timeouts are the same.
Libevent's current timeout code is relatively optimized for the
randomly scattered timeout case, where events are added with their
timeouts in no particular order.  We add and remove timeouts with
O(lg n) behavior.

Frequently, however, an application will want to have many timeouts
of the same value.  For example, we might have 1000 bufferevents,
each with a 2 second timeout on reading or writing.  If we knew this
were always the case, we could just put timeouts in a queue and get
O(1) add and remove behavior.  Of course, a queue would give O(n)
performance for a scattered timeout pattern, so we don't want to
just switch the implementation.

This patch gives the user the ability to explicitly tag certain
timeout values as being "very common".  These timeout values have a
cookie encoded in the high bits of their tv_usec field to indicate
which queue they belong on.  The queues themselves are each
triggered by an entry in the minheap.

See the regress_main.c code for an example use.

svn:r1517
2009-11-09 17:16:30 +00:00
2009-11-03 19:54:56 +00:00
2009-11-05 20:37:19 +00:00
2006-10-15 21:41:56 +00:00
2009-11-02 19:51:26 +00:00
2002-04-09 15:14:06 +00:00
2005-05-10 04:16:17 +00:00
2002-04-09 17:52:23 +00:00
2002-04-09 19:06:18 +00:00

To build libevent, type

$ ./configure && make

     (If you got libevent from the subversion repository, you will
      first need to run the included "autogen.sh" script in order to
      generate the configure script.)

Install as root via

# make install

You can run the regression tests by

$ make verify

Before, reporting any problems, please run the regression tests.

To enable the low-level tracing build the library as:

CFLAGS=-DUSE_DEBUG ./configure [...]

Acknowledgements:
-----------------

The following people have helped with suggestions, ideas, code or
fixing bugs:

  Alejo
  Weston Andros Adamson
  William Ahern
  Stas Bekman
  Andrew Danforth
  Mike Davis
  Shie Erlich
  Alexander von Gernler
  Artur Grabowski
  Aaron Hopkins
  Claudio Jeker
  Scott Lamb
  Adam Langley
  Philip Lewis
  David Libenzi
  Nick Mathewson
  Andrey Matveev
  Richard Nyberg
  Jon Oberheide
  Phil Oleson
  Dave Pacheco
  Tassilo von Parseval
  Pierre Phaneuf
  Jon Poland
  Bert JW Regeer
  Dug Song
  Taral

If I have forgotten your name, please contact me.
Description
A public libevent repository. The official repository is still at at git://levent.git.sourceforge.net/gitroot/levent/libevent
Readme Multiple Licenses 11 MiB
Languages
C 88.3%
CMake 3.9%
Python 2.5%
M4 2.3%
Roff 1.8%
Other 1.2%