js的线程梳理

进程线程

进程是工厂,进程之间资源不共享

线程是工人,同一个进程的多个线程协同完成任务,资源共享

浏览器是多进程的

主进程,第三方插件进程,GPU进程,浏览器渲染进程

浏览器的渲染进程是多线程的

GUI渲染线程,js引擎线程(与前者互斥),事件触发线程,定时触发线程,异步http请求线程

webworker

js仍是单线程的。js向引擎申请开一个子线程。引擎线程与worker通过postMessage通信

线程之间的关系

js分为同步任务和异步任务

同步任务在主线程执行,形成一个执行栈

一旦执行栈任务完成,就会读取任务列队,将可运行的异步任务添加到执行栈中

macrotask与microtask

进行完一个宏线程后会先看下有没有微线程,有的话先执行完微线程,再进行下一个宏线程。

宏线程:setTimeout 微线程:Promise