这里主要记录在平常中对知识的学习,经过结合笔记与自身理解的方式尝试写下总结
文章对细节可能不会一一介绍解释,内容仅做参考
复制代码
单线程就意味着,全部的任务都须要排队,当前一个任务结束时,才会执行后一个任务。若是前一个任务耗时很长,后一个任务就不得不一直等待。 若是是由于计算量大,CPU忙不过来倒也正常,可是不少时候CPU是闲着的,由于IO设备(输入输出设备)很慢(好比Ajax操做从网络读取数据),不得不等着结果出来,再往下执行。javascript
这时主线程彻底能够无论IO设备,挂起处于等待中的任务,先运行排在后面的任务。等到IO设备返回告终果,再回过头,把挂起的任务继续执行下去。因而,全部任务能够分红两种:java
在这里用一张图来讲明:面试
除了广义的同步任务和异步任务,会对任务有更精细的定义:promise
不一样类型的任务会进入对应的Event Queue,好比setTimeout和setInterval会进入相同的Event Queue浏览器
第一次进入总体代码(宏任务)后,开始第一遍循环,在主线程任务所有执行完毕后,会先去读取全部的微任务进行执行,而后再到宏任务,而宏任务里面或许又包含着宏任务与微任务。以此不断循环执行网络
用一张图说明:异步
举个栗子函数
setTimeout(function() {
console.log('setTimeout')
})
new Promise(function(resolve) {
console.log('promise')
resolve()
}).then(function() {
console.log('then')
})
console.log('console')
复制代码
在理解时候须要将上面提到的两点结合起来(同步异步 + 宏观微观),才会造成机制。在代码运行时,能够想成是以代码片断来工做的oop
19.4.11 补充:今天在刷文章的时候看到相关的题目,感受能够加深理解一波学习
console.log('sync1')
setTimeout(function (){
console.log('setTimeout')
}, 0)
var promise = new Promise(function(resolve, reject) {
setTimeout(function() {
console.log('setTimeout-Promise')
}, 0)
console.log('promise')
resolve()
})
promise.then(() => {
console.log('promise-Then')
setTimeout(function() {
console.log('promise-Timeout')
}, 0)
})
setTimeout(function() {
console.log('lastSetTimeout')
}, 0)
console.log('sync2')
复制代码
面试相关: