• Show log

    Commit

  • Hash : 693c24ef
    Author : Nick Mathewson
    Date : 2009-11-09T17:16:30

    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