<返回更多

什么是单线程?异步任务的2种分类中,各自有哪些API?

2019-08-07    
加入收藏

js 是单线程执行,虽然增加了一个 worker 创造了多线程环境,但 worker 受限很多,本质上还是一个单线程。 js 执行是有一个执行栈,主要分了同步任务和异步任务,异步任务又分宏任务(macro-task)和 微任务(micro-task)。

宏任务有:

  1. setTimeout
  2. I/O
  3. setInterval
  4. setImmediate
  5. 主线程
  6. MessageChannel

微任务有:

  1. Promise 系列 .then .catch .finally
  2. process.nexttick
  3. MutationObserver

看下面这个案例,console.log从上到下,1到8排列。那么打印的结果是什么呢?

什么是单线程?异步任务的2种分类中,各自有哪些API?30秒看懂

 

只要记住了上述罗列的宏任务和微任务,就可以轻松解答了。说到底就是一道记忆题。

第一:从上到下执行,三个同步任务,打印1,6,8.

什么是单线程?异步任务的2种分类中,各自有哪些API?30秒看懂

 

第二:处理异步任务,先找微任务,打印 7.

什么是单线程?异步任务的2种分类中,各自有哪些API?30秒看懂

 

第三:处理宏任务(同一层,图中绿线),先执行时间少的。打印内部的 同步任务3,异步微任务4. 此时又有一个宏任务setTimeout,可是时间比外层宏任务setTimeout 还要长。

什么是单线程?异步任务的2种分类中,各自有哪些API?30秒看懂

 

第四:先执行外层2秒的宏任务,打印2,再执行内层3秒宏任务,打印5.

什么是单线程?异步任务的2种分类中,各自有哪些API?30秒看懂

 

外层绿框是第一次比较的宏任务,先执行①;红框内层外层第二次比较的宏任务,先执行②;最后执行③。

实际上并没有内层外层的说法,下方绿框执行完毕之后就剩下③,然后③和②比较时间长短,决定谁先执行。③也不是等上3000毫秒,即3秒,而是

什么是单线程?异步任务的2种分类中,各自有哪些API?30秒看懂

 

一秒后打印3,4再一秒后打印2再一秒后打印5.

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>