事件循环机制(event loop)
进程:是系统分配的独立资源。是cpu资源分配的基本单位,进程是有一个或多个线程组成
线程:是进程的执行流,是cpu调用和分布的基本单位,多个线程可以共享一个进程资源
浏览器是多线程的,每一个标签都是独立的进程,但是空白的标签会被合成一个进程
事件循环机制:js是单线程的,但是会分为同步和异步执行,可以通过异步函数来模拟多进程,例如webworker技术
事件循环机制执行顺序:
首先,事件循环机制会将栈中的所有同步任务执行完毕,站内被清空后,出现了空闲状态,才会执行异步队列,在队列里会按顺序执行异步任务,先执行微任务,后执行宏任务,直到所有执行完毕,每次栈被清空,就会执行队列,一直这样循环,叫做事件循环机制
微任务和宏任务
微任务:then,catch...MutationOserver(nodejs)
宏任务:script代码,setTimeout,setInterval,ajax
例子1:
console.log(1)
setTimeout(function(){
console.log(3)
},0)
var p=new Promise(function(){
console.log(4)
res(22)
}).then(function(){
console.log(5)
})
setTimeout(function(){
console.log(6)
},0)
console.log(2)
解:142536 同步1 4 2 执行微任务5 在执行宏任务3 6
例子2:
console.log(1)
setTimeout(function(){
console.log(3)
},0)
var p=new Promise(function(res,rej){
console.log(4)
setTimeout(function(){
console.log(8)
},0)
res(22)
}).then(function(v){
console.log(5)
})
.then(function(v){
setTimeout(function(){
console.log(7)
},0)
})
setTimeout(function(){
console.log(6)
},0)
console.log(2)
解:14253867