EventLoop

JS的单线程

JS是一门单线程执行的编程语言。同一事件只能做一件事情。

JS的执行线程

任务1 → 任务2 → 任务3 → 任务N(待执行的任务队列)

单线程执行队列的问题:
如果前一个任务非常耗时,则后续的任务就不得不一直等待,从而导致程序假死的问题。

同步任务和异步任务

为了防止某个耗时任务导致程序假死的问题,JavaScript把待执行的任务分为了两类:

  1. 同步任务 (synchronous)
    • 又叫做非耗时任务,指的是在主线程上排队执行的那些任务
    • 只有前一个任务执行完毕,才能执行后一个任务
  2. 异步任务 (asynchronous)
    • 又叫做耗时任务,异步任务由JavaScript委托给宿主环境进行执行
    • 当异步任务执行完成后,会通知JavaScript主线程执行异步任务的回调函数

      宿主环境就是JS的执行环境,在浏览器里面运行JS,浏览器就是JS的宿主环境,在Node.js…

同步任务和异步任务的执行过程

js执行过程

EventLoop的基本概念

JavaScript主线程从“任务队列”中读取异步任务的回调函数,放到执行栈中依次执行。这个过程是循环不断的,所以整个的这种运行机
制又称为EventLoop(事件循环)。