1 进程是cpu资源分配的基本单位;
2 CPU 可以分出很多进程;
3 1个进程又可以分为1个或多个线程;线程是进程的执行流;同一个进程中,多个线程是共享该进程的资源的;
4 浏览器是多进程的;而浏览器内核(浏览器渲染进程是其中一种);
5 浏览器渲染进程 下分为很多线程:
GIU渲染线程 : 解析html,css 生成DOM树;重绘和回流;与js引擎线程相斥;
js 引擎线程:单线程工作,每次只能执行一次任务;解析js脚本,js运行耗时过长与导致页面阻塞;
补充:H5 web-worker 可以创建出一个独立于主线程的后台线程,运行一个脚本操作;运行费时任务
事件触发线程:事件触发后,将回调函数放入任务队列中
定时器线程:时间到达后,将回调函数放入任务队列中
http请求线程:请求成功·后,将回调函数放入任务队列中
宏任务:script(整体代码),setTimeout(),setinterval(); I/O; UI reding
微任务:process.nextTick()(node);promise.then() ;
1 先执行主体代码(宏任务);
2 遇到同步代码,在执行栈中直接执行;
3 遇到 settineout 异步宏任务 ,放入宏任务任务队列中;
4 遇到promise .reslove部分执行栈直接执行;then 函数 放入微任务异步任务队列里;
5 遇到同步任务 直接执行;
6 执行栈全部清空;同步任务执行完后,开始第一个事件循环,到任务队列中检查有没有微任务;有,放入执行栈执行;
7 开始第二次事件循环;检查有没有微任务,有,继续执行;没有 异步宏任务放入执行栈执行;
8 如此往复检查任务队列;再放入执行栈执行;再检查,再执行,叫事件循环;