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

Rhu*_*arb 9 c++ boost timer boost-thread boost-asio

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

Ale*_*x B 12

Boost不使用每个计时器的一个线程,它保留一个计时器队列.每个计时器都使用boost::asio::io_service对象来创建实际工作.

当您boost::asio::io_service::run()从多个线程显式运行时,此对象可以在一个或多个线程中调度其工作,但定时器和线程之间没有一对一的对应关系,并且Asio不会在您的背后创建线程.

  • (1)是的,如果你从线程A运行IO服务,所有的计时器处理程序将在线程A上运行.(2)首选创建许多计时器,因为它比手工计算最短的间隔更易于维护且更不容易出错对于一个计时器(你有一对一的关系黑白工作项和计时器). (6认同)
  • PS是的,你将复制Asio已经为你做的工作(跟踪最早的到期计时器). (2认同)