Boost logo

Boost Users :

Subject: [Boost-users] Some design details about boost::asio timer ?
From: Kartik Mahajan (kartik.mahajan_at_[hidden])
Date: 2008-09-30 08:14:55


Hi

 

I am implementing an asynchronous timer, would like to build it similar to
the one included in the asio library. I am using a timer wheel
implementation i.e a fixed size array of double linked lists.

The timer wheel implementation is quite efficient as insertion is O(1),
deletion of timer is O(1) and firing of timer is also O(1). The only
drawback is that the time registered should not be greater than the size of
1 rotation of the wheel.

typedef list<Timer> ListOfTimers

ListOfTimers myTimerobj(10000) ( with 100 ticks per second this would give
an accuracy of 10ms )

The thread in the timer delegates the execution of the callbacks to another
thread ( take from a thread pool ).

 

 

>From what I have read from the code of timer in asio library, I guess its
implemented as a heap. But in a heap data structure (implemented as vector
), insertion and deletion would be O(lg n) I would like to know the reason
to use heap. This is purely for educational purpose so that I can understand
the design rationale. Also I would like to know that would boost::asio
asynchronous timer be efficient for say 200000 timers firing at the same
time ? I also wish to implement a timer similar to one in boost::asio,
purely for knowledge. I need this in my application in which I would
thousands of timers firing at the same time.

 

Can someone provide some design details of boost::asio timer implementation
so that I can build a timer similar to that. ( It would make it easy for me
to read the code provided by boost::asio if I know the design rationale)

 

Please don't get offended if you find the above post irrelevant in this
mailing list :-)

 

 

Here is the very simple interface I am implementing.

Here is the API I wish to implement( I would like to see comments on what
else should be the public interface of such a class )

 

TimerHandle registerTimer(period,callBackFunctor)

 

void cancelTimer(TimerHandle)

 

int timeElapsed(TimerHandle)

 

int timeLeft(TimerHandle)

 

 

 

 

Thanks & Regards

Kartik Mahajan



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net