前言
本文从JS是单线程开始,到JS为了提高效率,使用异步,到JS如何实现异步(做法是主线程外另开工作线程和任务队列,他们之间是如何工作的——事件循环),再到浏览器是如何配合JS执行异
步(其他浏览器线程)。最后提到了一个任务队列的优先级问题。
涉及的需要重点理解的概念有主线程、执行栈、异步、异步任务、任务队列、事件循环等。
一、JS是单线程。
所谓单线程,是指在JS引擎中负责解释和执行JavaScript代码的线程只有一个。不妨叫它主线程。
选择单线程的原因之一是JS要操作DOM,如果多线程可能造成执行混乱。经典栗子来了,有要删除节点的函数,有要操作节点的。万一多线程执行顺序乱了就坏了。
二、JS的异步
单线程使得JS引擎只能一个任务结束再执行下一个,如果某任务时间较长,就会发生阻塞。为了解决这个问题。JS也使用了异步编程。