9

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

4

2 回答 2

12

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

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

于 2010-03-09T01:52:28.110 回答
1

最新版本的 Asio、Boost 1.43 及更高版本timerfd_create(2)在 Linux 上使用 API for deadline_timers。

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

于 2013-03-10T05:02:14.240 回答