盒子
文章目录
  1. Event Loop
    1. 为什么是单线程
    2. Why
    3. 任务
    4. 事件和回调函数
    5. Event Loop
    6. Node.js

事件循环

Event Loop

Event Loop

为什么是单线程

Why

解决单线程的一些问题

任务

单线程意味着,所有的任务都需要排队

  • 同步任务

  • 异步任务,进入任务队列

    • 所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。

    • 主线程之外,还存在一个”任务队列”(task queue)。只要异步任务有了运行结果,就在”任务队列”之中放置一个事件。

    • 一旦”执行栈”中的所有同步任务执行完毕,系统就会读取”任务队列”,看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。

    • 主线程不断重复上面的第三步。

      只要主线程空了,就会去读取”任务队列”,这就是JavaScript的运行机制。这个过程会不断重复。

事件和回调函数

  • 所谓”回调函数”(callback),就是那些会被主线程挂起来的代码。异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行对应的回调函数。

Event Loop

主线程从”任务队列”中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。

Node.js

  • process.nextTick和setImmediate。
    • process.nextTick: 指定的任务总是发生在所有异步任务之前
    • setImmediate方法则是在当前”任务队列”的尾部添加事件->

简言之就是JS只有一个主线程,主线程执行完执行栈的任务后去检查异步的任务队列,如果异步事件触发,则将其加到主线程的执行栈。