Timer

  • timer采用四叉堆,树的高度降低
  • 节点的值为定时到期时间
  • Go 1.14 时,取消了 timerproc 协程,把检查到期定时任务的工作交给了 runtime. schedule,不需要额外的调度,在每次的调度循环中,执行 runtime.schedule 以及 findrunable 时直 接检查并运行到期的定时任务。Go 运行时中的 Timer 使用 netpoll 进行驱动,每个 Timer 堆均附 着在 P 上,形成一个局部的 Timer 堆,消除了唤醒一个 Timer 时进行 M/P 切换的开销,大幅削 减了锁的竞争,与 nginx 中 Timer 的实现方式非常相似。
  • 依赖schedule调度,schedule函数调用checkTimers函数,执行已经到时间的timer
  • sysmon 由mainG创建,定时执行netpoll。对运行时间较长的P执行抢占操作

results matching ""

    No results matching ""