在看 Node http 模块文档的时候, 才留意到
server.timeout
这个属性, 本想简单介绍一下, 但是在梳理过后发现关于timeout
有庞大的内容支撑:server.timout -> node core timers -> uv timers -> linux msleep/hrtimer -> clocksource -> tsc -> cmos rtc -> clock cycle
, 所以拆分成几部分大致做下介绍, 期望定时器系列结束之后, noder 能够大致明白:clock cycle
是如何驱动 linux 的msleep/hrtimer
;linux 的 timers 与 uv timers 的关系;node timers 与 uv timers的关系。
在Libuv中的timer中大胆猜测了epoll是通过linux中低精度定时器
实现的,不幸的是只猜对了一半。关于epoll在timer中的应用需要关注两个地方: 同步阻塞
和定时触发
,其中定时触发是通过linux的高精度定时器实现的(其实linux只要支持高精度定时器,最终所有的定时器都是高精度定时器,只不过低精度定时器是通过高精度定时器模拟出来的)。