setTimeout是用c语言库libev ev_timer实现的。 ev_timer如何运作?
是否使用轮询实现?如果我将超时设置为30秒,是否有任何进程检查挂起超时的每毫秒?
答案 0 :(得分:0)
libev已被libuv取代。
计时器API显示为here
基本上,在系统中的所有其他非IO活动完成后,事件循环将用于轮询。目前,它将有一个或多个待处理的I / O事件,以及一个或多个计时器事件等。轮询的输入是以这样的方式精心设计的,即超时是注册时间事件中的最小值。这与事件循环维护的相对时间字段相结合,有助于找出计时器回调被触发的正确时间。
简而言之,等待的时间通过轮询呼叫委托给操作系统,而不是通过定期唤醒和重新检查。
希望这有帮助。