gpt4 book ai didi

c++ - 为什么 `boost::asio::deadline_timer`会为每个 `timer_queue`对象分配一个 `deadline_timer`实例呢?

转载 作者:太空狗 更新时间:2023-10-29 23:02:57 26 4
gpt4 key购买 nike

我正在研究基于 boost 1.52 的 boost::asio::deadline_timer 的实现。

the article on highscore 中所述,它分三部分实现:

  • deadline_timer,输入输出对象
  • deadline_timer_service,服务
  • detail::deadline_timer_service,服务实现

将有一个 deadline_timer_service 实例服务于多个 deadline_timer 对象。为每个 deadline_timer 对象创建一个 detail::deadline_timer_service 实例。此外,计时器由调度程序调度,调度程序通常是 react 器(即大多数情况下 Linux 上的 epoll_reactor)。

detail::deadline_timer_service 中有一个timer_queue_ 类型的timer_queue 成员,它是一个存储预定定时器的堆。这意味着每个 deadline_timer 对象都有一个 timer_queue 实例。多个timer_queue对象可以通过add_timer_queue()添加到调度器中,它们由一个类timer_queue_set管理。

我的问题是,为什么 asio 创建多个队列来处理计时器?如果我们在调度器中有一个所有计时器都可以共享的计时器队列实例,有什么缺点?

最佳答案

我又看了一遍代码,发现了我的错误。实际关系如下:

  • 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 的一个。现在对我来说很合理。

高分链接好像把服务实现类型和定时器实现类型合二为一了,有点误导。

关于c++ - 为什么 `boost::asio::deadline_timer`会为每个 `timer_queue`对象分配一个 `deadline_timer`实例呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26922754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com