boost :: asio :: deadline_timer是否为每个计时器使用一个线程?

时间:2010-03-09 01:42:22

标签: c++ boost timer boost-asio boost-thread

我有一个项目列表,我需要在不同的时间间隔更新。该列表可以长达数千个项目。每个项目可能具有不同的间隔。如果我为每个项目创建一个计时器,我是否会使用线程使系统饱和?我认为最好创建一个等于项目集中最小间隔的计时器,然后在每次更新时增加一个计数器,然后检查计数器现在是否等于任何其他间隔。如果最小间隔是所有其他间隔的倍数,则应该起作用。有什么建议吗?

2 个答案:

答案 0 :(得分:12)

Boost每个计时器不使用一个线程,它保留一个计时器队列。每个计时器都使用boost::asio::io_service对象创建,可以完成实际工作。

这个对象可以在一个或多个线程when you run boost::asio::io_service::run() explicitly from multiple threads中调度它的工作,但是定时器和线程之间没有一对一的对应关系,而且Asio不会在你的背后创建线程。

答案 1 :(得分:1)

Recent versions Asio,Boost 1.43及更高版本,使用Linux上的timerfd_create(2) API获取deadline_timer s。

  

更改为使用timerfd在Linux上调度计时器时   可用。