js的线程梳理
进程线程
进程是工厂,进程之间资源不共享
线程是工人,同一个进程的多个线程协同完成任务,资源共享
浏览器是多进程的
主进程,第三方插件进程,GPU进程,浏览器渲染进程
浏览器的渲染进程是多线程的
GUI渲染线程,js引擎线程(与前者互斥),事件触发线程,定时触发线程,异步http请求线程
webworker
js仍是单线程的。js向引擎申请开一个子线程。引擎线程与worker通过postMessage通信
线程之间的关系
js分为同步任务和异步任务
同步任务在主线程执行,形成一个执行栈
一旦执行栈任务完成,就会读取任务列队,将可运行的异步任务添加到执行栈中
macrotask与microtask
进行完一个宏线程后会先看下有没有微线程,有的话先执行完微线程,再进行下一个宏线程。
宏线程:setTimeout 微线程:Promise