进程是cpu的资源分配的最小单位。浏览器
多进程:多进程指的是在同一个时间里,同一个计算机系统中若是容许两个或两个以上的进程处于运行状态。多进程带来的好处是明显的,好比你能够听歌的同时,打开编辑器敲代码,编辑器和听歌软件的进程之间丝绝不会相互干扰。服务器
在浏览网页时,同时打开几个新的页面, 这就要打开几个浏览窗口,但一旦开启十几个窗口,整个计算机就会愈来愈慢。网络
通俗的讲,就是用户打开多个窗口,若是其中一个窗口崩掉了,也不会影响整个浏览器,其余的界面照样正常运行多线程
负责渲染浏览器界面HTML元素,当界面须要重绘(Repaint)或因为某种操做引起回流(reflow)时,该线程就会执行。在Javascript引擎运行脚本期间,GUI渲染线程都是处于挂起状态的,也就是说被”冻结”了.异步
也能够称为JS内核,主要负责处理Javascript脚本程序,例如V8引擎。Javascript引擎线程理所固然是负责解析Javascript脚本,运行代码。编辑器
这是由于Javascript这门脚本语言诞生的使命所致:JavaScript为处理页面中用户的交互,以及操做DOM树、CSS样式树来给用户呈现一份动态而丰富的交互体验和服务器逻辑的交互处理。若是JavaScript是多线程的方式来操做这些UI DOM,则可能出现UI操做的冲突; 若是Javascript是多线程的话,在多线程的交互下,处于UI中的DOM节点就可能成为一个临界资源,假设存在两个线程同时操做一个DOM,一个负责修改一个负责删除,那么这个时候就须要浏览器来裁决如何生效哪一个线程的执行结果。固然咱们能够经过锁来解决上面的问题。但为了不由于引入了锁而带来更大的复杂性,Javascript在最初就选择了单线程执行。函数
因为JavaScript是可操纵DOM的,若是在修改这些元素属性同时渲染界面(即JavaScript线程和UI线程同时运行),那么渲染线程先后得到的元素数据就可能不一致了。所以为了防止渲染出现不可预期的结果,浏览器设置GUI渲染线程与JavaScript引擎为互斥的关系,当JavaScript引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到引擎线程空闲时当即被执行。优化
因为GUI渲染线程与JavaScript执行线程是互斥的关系,当浏览器在执行JavaScript程序的时候,GUI渲染线程会被保存在一个队列中,直到JS程序执行完成,才会接着执行。所以若是JS执行的时间过长,这样就会形成页面的渲染不连贯,致使页面渲染加载阻塞的感受。插件
浏览器定时计数器并非由JavaScript引擎计数的, 由于JavaScript引擎是单线程的, 若是处于阻塞线程状态就会影响记计时的准确, 所以经过单独线程来计时并触发定时是更为合理的方案。线程
当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。这些事件能够是当前执行的代码块如定时任务、也可来自浏览器内核的其余线程如鼠标点击、AJAX异步请求等,但因为JS的单线程关系全部这些事件都得排队等待JS引擎处理。
在XMLHttpRequest在链接后是经过浏览器新开一个线程请求, 将检测到状态变动时,若是设置有回调函数,异步线程就产生状态变动事件放到 JavaScript引擎的处理队列中等待处理。