计算机原理
计算机原理分为进程和线程
- 进程: 为CPU资源调度的最小单位
- 线程: CPU调度的最小单位
问答
- 映射到前端:浏览器。chrome新开一个窗口,tab页是进程还是线程? - 进程,从区别概念上出发
- 不同tab之间如何通信 cookie-session-localstorage
浏览器原理
浏览器主要五个线程GUI渲染引擎、js渲染引擎、定时器渲染引擎、异步HTTP请求线程,事件触发器,既然知道了这5个线程那么这分别是如何工作,并且有何特点
GUI渲染引擎
- 主要解析HTML,css构建dom树生成render树,布局和绘制,
- GUI与js引擎互斥,当js引擎执行时,GUI将处于pending状态,当队列空闲时才会执行GUI
js渲染引擎
- 处理js,解析执行脚本
- 分配、处理、执行待执行的事件和event队列
- 阻塞GUI渲染
定时器引擎
- 异步定时器的执行 setTimeout&setInterval
- 接收js引擎分配的定时器的任务,并计数
- 处理完成后交给事件触发线程触发
异步HTTP请求线程(可叫IO线程)
- 异步执行请求类数据 promise&ajax
- 接收js引擎分配的http请求
- 监听回调交给事件线程触发
事件触发线程
- 接收定时器、异步线程、用户操作
- 将回调事件一次接入到任务队列最后还给js线程
任务队列是如何的呢 event loop
任务分为宏任务(macro)如setTimeout,script,setInterval,微任务(micro)new Promise().then
- 具体为如果有宏任务则执行宏任务,然后再执行微任务,如有异步,则执行异步宏任务再执行异步微任务
这里有个问题需要区分异步还是同步
-
同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入Event Table并注册函数
-
当指定的事情完成时,Event Table会将这个函数移入Event Queue。
-
主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。
-
上述过程会不断重复,也就是常说的Event Loop(事件循环)。
以上就是分享的内容,至于event loop事件循环,建议拜读# 张倩qianniuer# JS事件循环机制(event loop)之宏任务/微任务