理解任务队列
同步任务
同步任务即主线程。同一时间只能做一件事,除此之外不能做其它的事情。
主线程中的任务做完才会去其它的任务队列(异步任务队列)里抓任务来做。
任务队列,我们拆分词语,可以分成任务和队列两个词语。
- 任务:js中运行时真正执行的计算,需要待办的事项
- 队列:存储任务的数据结构是队列的形式(First Input First Output,FIFO)
任务队列就好比去医院排队的过程:
进入队列 | 执行任务 | 移除任务 | 执行完毕 |
---|---|---|---|
排队 | 挂号 | 离开排队的队伍 | 就诊 |
- 先排队的先挂号,后排队的后挂号
- 先进入任务队列的先执行,后进入任务队列的后执行
这便是只存在同步任务的情况。
js就是单线程语言,js的代码若不进行特殊处理,其执行顺序一般按编写、调用的顺序执行。
.
.
异步任务
宏观上的执行顺序
比如秃鹫这类食腐动物,它们只在猎物死亡后才会去进食,在此之前,它们会静静等待其它的捕食者先进食。
即:
- 同步任务优先于异步任务 // 异步任务在同步任务执行之后执行
种类
异步任务在js中大致为两种:
- 宏任务
- 微任务
既然种类不止一个,那么必然会有执行的优先级问题。
我们拿大人与小孩举例子,将吃饭看作为任务:
大人吃饭 | 小孩吃饭 |
---|---|
宏任务 | 微任务 |