javascript是单线程的一门语言,所以在执行任务的时候,所有任务必须排队,然后一个一个的执行.这就是同步模式
所以同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。
所以js的运行机制是这样的:
(1): 所有同步任务都在主线程上执行,形成一个执行栈.
(2): 主线程之外,还存在一个"任务队列"(task queue)。异步任务进入任务队列等待主线程执行完毕.
(3): 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",对应的异步任务结束等待状态,进入执行栈,开始执行。
怎么知道主线程任务为空: JS引擎中存在monitoring process进程,它会持续不断的检查主线程执行栈是否为空,一旦为空,就会去Event Queue那里检查是否有等待被调用的函数