异步编程的背景

JS 引擎建立在单线程事件循环的概念上。单线程(Single-threaded ) 意味着同一时刻只能执行一段代码,与 Java 或 C++ 这种允许同时执行多段不同代码的多线程语言形成了反差。

多段代码可以同时访问或修改状态,维护并保护这些状态就变成了难题,这也是基于多线程的软件中出现 bug 的常见根源之一。
JS 引擎在同一时刻只能执行一段代码,所以引擎无须留意那些“可能”运行的代码。代码会被放置在作业队列(job queue ) 中,每当一段代码准备被执行,它就会被添加到作业队列。当 JS 引擎结束当前代码的执行后,事件循环就会执行队列中的下一个作业。事件循环( event loop ) 是 JS 引擎的一个内部处理进程,能监视代码的执行并管理作业队列。要记住既然是一个队列,作业就会从队列中的第一个开始,依次运行到最后一个。