浏览器中的Event loop 与 Node的 Event loop

浏览器中的Event loop 与 Node的 Event loop##

参考连接yuchengkai.cn/docs/fronte…

浏览器

  1. JS 是门非阻塞单线程语言,由于在最初 JS 就是为了和浏览器交互而诞生的。若是 JS 是门多线程的语言话,咱们在多个线程中处理 DOM 就可能会发生问题。
  2. HTML5 标准规定setTimeout这个函数第二个参数不得小于 4 毫秒,不足会自动增长。
  3. 浏览器正确的一次 Event loop 顺序是这样的

    执行同步代码,这属于宏任务。html

    执行栈为空,查询是否有微任务须要执行浏览器

    执行全部微任务多线程

    必要的话渲染 UIfrontend

    而后开始下一轮 Event loop,执行宏任务中的异步代码异步

Node

Node Event Loop

timer

timers 阶段会执行 setTimeout 和 setInterval函数

一个 timer 指定的时间并非准确时间,而是在达到这个时间后尽快执行回调,可能会由于系统正在执行别的事务而延迟。oop

下限的时间有一个范围:[1, 2147483647] ,若是设定的时间不在这个范围,将被设置为 1。线程

I/O

I/O 阶段会执行除了 close 事件,定时器和 setImmediate 的回调cdn

idle, prepare

idle, prepare 阶段内部实现htm

poll

poll 阶段很重要,这一阶段中,系统会作两件事情

执行到点的定时器 执行 poll 队列中的事件 而且当 poll 中没有定时器的状况下,会发现如下两件事情

若是 poll 队列不为空,会遍历回调队列并同步执行,直到队列为空或者系统限制 若是 poll 队列为空,会有两件事发生 若是有 setImmediate 须要执行,poll 阶段会中止而且进入到 check 阶段执行 setImmediate 若是没有 setImmediate 须要执行,会等待回调被加入到队列中并当即执行回调 若是有别的定时器须要被执行,会回到 timer 阶段执行回调。

check

check 阶段执行 setImmediate

close callbacks

close callbacks 阶段执行 close 事件

而且在 Node 中,有些状况下的定时器执行顺序是随机的

相关文章
相关标签/搜索