线程和进程是操作系统中的两个概念:
听起来很抽象,这里还是给出我的解释:
再用一个形象的例子解释:
这里有一幅图, 可以看一下帮助大家理解:

操作系统是如何做到同时让多个进程(边听歌、边写代码、边查阅资料)同时工作呢?
你可以在Mac的活动监视器或者Windows的资源管理器中查看到很多进程:

我们经常会说JavaScript是单线被程(可以开启workers**)的,但是JavaScript的线程应该有自己的容器进程**:浏览器或者Node。
浏览器是一个进程吗,它里面只有一个线程吗?
JavaScript的代码执行是在一个单独的线程中执行的:
所以真正耗时的操作,实际上并不是由JavaScript线程在执行的:
如果在执行JavaScript代码的过程中,有异步操作呢?
function sum(num1, num2) {
return num1 + num2
}
function bar() {
return sum(20, 30)
}
setTimeout(() => {
console.log("10秒后的setTimeout")
}, 10000)
const result = bar()
console.log(result)

但是事件循环中并非只维护着一个队列,事实上是有两个队列:
那么事件循环对于两个队列的优先级是怎么样的呢?
main script中的代码优先执行(编写的顶层script代码);
在执行任何一个宏任务之前(不是队列,是一个宏任务),都会先查看微任务队列中是否有任务需要执行
也就是宏任务执行之前,必须保证微任务队列是空的;
如果不为空,那么就优先执行微任务队列中的任务(回调);
微任务队列中是否有任务需要执行**
也就是宏任务执行之前,必须保证微任务队列是空的;
如果不为空,那么就优先执行微任务队列中的任务(回调);
讲完这些后面我们就可以看看Promise的面试题了