首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

asio 调度器实现 - timer 实现详解

Core部分 - timer_queue的实现 asio的timer_queue实现与libevent一样, 使用了min-heap(小根堆)的实现. 1.1 min-heap 实现简述 首先, 因为...min-heap是一个完全二叉树, 所以我们可以直接使用数组来对其进行表示, 因为结构的特殊性, 我们很容易知道, 对于任意非0节点i: - 其父节点为(i-1)/2 - 左儿子为 2(i+1) - 1...另外min-heap的实现会保证根节点就是最小元, 用于定时器, 则是最近需要被执行的节点了, 利用这点, 我们能够很快的找出已经超时的节点进行后续的处理....根据当前元素的大小, 逐步执行shift-up操作, 直到找到一个合适的位置(满足min-heap约束) 举例来说: 对于上图这样一个已有的min-heap, 当我们插入一个新的值为0的节点时..., 整个min-heap的调整过程是: 最后得到的min-heap如下: 删除节点(以根节点为例): 1.

64390
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    c++异步:asio的scheduler实现!

    (一)Core部分-timer_queue的实现 asio的timer_queue实现与libevent一样,使用了min-heap(小根堆)的实现。...min-heap实现简述 首先,因为min-heap是一个完全二叉树,所以我们可以直接使用数组来对其进行表示,因为结构的特殊性,我们很容易知道,对于任意非0节点i: 其父节点为(i-1)/2 左儿子为...另外min-heap的实现会保证根节点就是最小元,用于定时器,则是最近需要被执行的节点了,利用这点,我们能够很快的找出已经超时的节点进行后续的处理。...(满足min-heap约束) 举例来说: 对于上图这样一个已有的min-heap,当我们插入一个新的值为0的节点时,整个min-heap的调整过程是: 最后得到的min-heap如下: 删除节点(...这里也能体现出min-heap实现对定时器场合的适用性,操作和获取根节点的成本都比较低,这样就为我们在外围实现高效的timer scheduler提供了便利。

    1.6K10
    领券