eventloop

进程和线程

比如我打开一个页面就是一个进程,比如 自上而下渲染 发请求……

进程是程序,线程是程序中具体做事的人。

eventloop-LMLPHP

eventloop-LMLPHP

例题

代码执行放到栈内存中执行,产生对应的上下文,栈内存和堆内存之外,还会形成2个队列。

eventloop-LMLPHP

promise & async/await

promise.then,已知promise实例的状态,是创建onfullfilled/onreject创建微任务执行。

eventloop-LMLPHP

先放到webapi中监听,监听没问题放到event queue里去排队。主线程空闲去取微任务

eventloop-LMLPHP

eventloop-LMLPHP

自己梳理

js是单线程的。首先整个script也可以理解成一个宏任务,同步代码自上而下依次执行。遇到异步代码就会把异步任务被放到event queue里,分为微任务队列和宏任务队列。同步代码执行完后首先会去查看微任务队列,微任务会优先执行,会先把微任务队列清空;到宏任务队列时,会取出宏任务队列的第1个执行,那如果在执行过程中又产生了微任务,则还是先会把微任务清空再往后走,所以说微任务的优先级是很高的。每次event loop都会先把当前循环中产生的微任务先全部清空,再往后走下一个宏任务。

所以每次eventloop的处理是:一个宏任务和当前循环产生的所有微任务

浏览器中的事件循环(Event Loop)机制 | 小康博客

你不会还没搞懂JS事件循环(Event Loop)吧? - 掘金

05-03 03:16