Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does boost::asio::deadline_timer use a thread for each timer?

I have a list of items that I need to update on different intervals. The list can grow to be thousands of items long. Each item could potentially have a different interval. If I create one timer per item, am I going to saturate the system with threads? I was thinking it might be better to create one timer equal to the smallest interval in the set of items, and then on each update increment a counter, and then check to see if the counter is now equal to any other intervals. This should work provided the smallest interval is a multiple of all the other intervals. Any suggestions?

like image 304
Rhubarb Avatar asked Mar 09 '10 01:03

Rhubarb


2 Answers

Boost does not use a thread per timer, it keeps a timer queue. Every timer is created with boost::asio::io_service object that does the actual work.

This object can dispatch its work in one or more threads, when you run boost::asio::io_service::run() explicitly from multiple threads, but there is no one-to-one correspondence between timers and threads, and Asio will not create threads behind your back.

like image 59
Alex B Avatar answered Oct 27 '22 19:10

Alex B


Recent versions of Asio, Boost 1.43 and later, use the timerfd_create(2) API on Linux for deadline_timers.

Changed to use timerfd for dispatching timers on Linux, when available.

like image 1
Sam Miller Avatar answered Oct 27 '22 19:10

Sam Miller