Eventloop

262 阅读1分钟

操作系统的一些知识

当我按下空格键,操作系统是咋知道的

  1. 键盘下面是个复杂的电路。当我按下空格键会有一个电流,这个电流会触发空格键的信息(比如空格键的信息是个数字101)
  2. 这个101会被传给操作系统
  3. 操作系统通知浏览器这个键盘事件
  4. 浏览器接收到操作系统给他的这个键盘事件,得到空格键信息,就会显示在input里面

其实按下键盘后是存到一个队列里,操作系统是每五秒就去队列里看看有没有信息(这叫轮询)。没有就走,有就传给浏览器等。

EventLoop是阶段的转移

Node.js

  1. Node.js的EventLoop有六个阶段。我们只需要了解三个阶段:times、poll、check
  2. API
  • setTimeout里的函数会存在times阶段。
  • setImmediate里的函数会存在check阶段。
  • nextTick会放在当前阶段的后面,跳转到下一阶段之前。
  • Promise不讨论了。

Chrome

  1. Chrome的EventLoop有两个阶段:宏任务(一会儿)和微任务(马上)
  2. API
  • setTimeout和setImmediate里的函数会存在宏任务(一会儿)阶段
  • promise.then(fn)的函数在resolve会存在微任务(马上)阶段
  • await转化成promise

new Promise(fn)马上执行fn的