我正在研究boost::asio::deadline_timer
的实现,基于boost 1.52。
如the article on highscore所述,它分为三部分实施:
deadline_timer
,即i / o对象deadline_timer_service
,服务detail::deadline_timer_service
,服务实施将有一个deadline_timer_service
个实例服务于许多deadline_timer
个对象。为每个detail::deadline_timer_service
对象创建deadline_timer
的实例。此外,定时器由调度程序调度,调度程序通常是一个反应堆(在大多数情况下,在Linux上为epoll_reactor
)。
timer_queue_
中有timer_queue
个detail::deadline_timer_service
成员,它是一个存储预定计时器的堆。这意味着每个timer_queue
对象将有一个deadline_timer
实例。 timer_queue
可以将多个add_timer_queue()
个对象添加到调度程序中,它们由类timer_queue_set
管理。
我的问题是,为什么asio
创建多个队列来处理计时器?如果我们在调度程序中有一个所有计时器可以共享的计时器队列实例,那么有什么缺点?
答案 0 :(得分:0)
我再次阅读代码,发现我的错误。实际关系如下:
basic_deadline_timer
是i / o对象类型,每个deadline_timer都有一个实例; deadline_timer_service
是服务类型,每个io_service
一个,由basic_io_object
的构造函数检索; detail::deadline_timer_service
是服务实现类型,每个服务一个,每个io_serive
只有一个。它被定义为deadline_timer_service
; detail::deadline_timer_service::implementation_type
:计时器的实现类型,每deadline_timer
一个。由于timer_queue_
是detail::deadline_timer_service
的成员,因此每io_service
也是一个成员。对我来说现在看起来很合理。
高分数链接似乎已将服务实现类型和计时器实现类型合并为一个,这有点误导。