ajax是宏任务还是微任务,JavaScript的宏任务和微任务

  • Post author:
  • Post category:java


1. JavaScript是单线程语言

JavaScript是一门单线程语言,在最新的html5中提出了web-worker,但是JavaScript是单线程的核心并没有改变。

所有关于JavaScript的多线程都是由单线程模拟出来的。

2. JavaScript的事件循环

由于JavaScript是单线程,所以很多任务只能一个一个排队,这对于用户体验是非常不友好的。因此聪明的程序员就把任务分为两类:

同步任务

异步任务

当我们打开一个网页的时候,网页的渲染和dom解析就是同步任务,而加载图片、音乐等大量下载任务的时候就是异步任务。

借用一张图片

83061ef0ab54

JavaScript的执行机制

同步和异步任务分别进入不同的执行“场所”,同步的进入主线程,异步的进入Event Table并注册函数

当指定的事情完成时,Event Table会将这个函数移入Event Queue

主线程内的任务执行完毕为空的时候,会去Event Queue读取对应的函数,进入主线程执行

上述过程会不断重复,也就是常说的Event Loop(事件循环)

如何知道主线程的执行栈为空?js引擎存在monitoring process进程,会持续不断的检查主线程执行栈是否为空,一旦为空,就会去Event Queue那里检查是否有等待被调用的函数。

let data = [];

$.ajax({