JavaScript 的线程机制
JavaScript有一个<b>主线程</b>和<b>Event Loop线程(消息线程)</b>
1、<b>主线程</b>是同步的,也就是一个<b>执行栈</b>。前一个任务结束,才会执行后一个任务。
2、<b>Event Loop线程</b>的任务是不直接进入主线程的执行栈的,而是进入<b>“任务队列”</b>。只有“任务队列”通知主线程,某个异步任务可以执行了,该任务才会进入主线程的执行栈执行。
“任务列表”的机制是<b>先进先出</b>。
大致步骤如下:
(1)所有同步任务都在主线程上执行,形成一个执行栈。
(2)主线程之外,还存在一个“任务队列”。只要异步任务有了运行结果(回调函数等),就在"任务队列"之中放置一个事件。
(3)一旦执行栈中的所有同步任务执行完毕,系统就会读取"任务队列"的任务进入执行栈,开始执行。
(4)主线程不断重复第三步。
总结
JavaScript只有一个主线程的执行栈,其他异步任务的结果都会加入到任务队列,等待主线程的执行栈无任务的时候,就会去获取任务队列的任务执行。