剖析浏览器的进程与线程

进程

进程是CPU资源分配的最小单位。

上图可知, 进程(ID 18164)得到CPU内存资源大小为205.8MB。

多进程

同一时刻、同一操作系统、运行2个或2个以上的进程。例如:边听歌(KuGou App)边敲代码(Idea App),KuGou与Idea同时运行且互不干扰。

浏览器的多进程

浏览器进程包括以下几种:

  • Browser进程:浏览器的主进程,负责协调、主控。
  • 第三方插件进程:使用插件时创建该插件对应的进程。
  • GUI进程:最多只有一个GPU进程,负责3D绘制。
  • 浏览器渲染进程(内核):默认一个Tab页面一个进程,有时多个空白Tab会合并成一个进程。Tab页面互不影响、控制页面渲染、脚本执行、事件处理等。(Tab页面包含css、js、onclick事件等)

上图中,360安全浏览器运行29个进程,打开至少29个页面(多个空白页面会合并为一个进程)。

多进程浏览器的特点

  • 多进程充分利用CPU多核计算力的优势
  • 避免第三方插件影响整个浏览器
    • 注:某个Tab使用了第三方插件,此时插件失败仅影响这个引用插件的Tab,其他Tab不会受到影响。
  • 避免页面渲染影响整个浏览器
    • 注:某个Tab渲染失败,不影响其他Tab页面。

一言以蔽之:用户打开多个窗口,其中一个窗口挂了,其他窗口不会受影响(正常运行)。

进程与线程

  • 进程是工厂,各工厂之间相互独立。( 进程之间相互独立
  • 线程是生产线,一个工厂内有多条生产线。( 一个进程可以有多个线程
  • 一个产品是都由一条或多条生产线完成。( 一个或多个线程合作完成一个任务
  • 生产线之间共享工厂资源。( 多个线程之间共享代码段、数据集、堆等以及进程资源,诸如打开文件和信号

浏览器内核的多线程

浏览器内核常驻线程包括以下5种:

GUI渲染线程

负责渲染浏览器界面HTML元素,界面需要重绘(repaint)或者回流(reflow)时会执行GUI渲染进程。

回流:通常由某种操作引起。

JavaScript引擎线程

即JS内核,例如:Chrome的V8引擎,负责处理JavaScript脚本程序。

划重点:GUI渲染线程与JavaScript引擎线程是互斥的,即同一时刻只能由其中一个执行。

假设:GUI渲染线程时JavaScript 操纵DOM元素并删除某个div,那么被删除的div也会被渲染,与实际不符。JavaScript引擎在执行时,GUI线程通常会被挂起。GUI线程保存在等待任务队列中,JavaScript线程结束时立即执行GUI线程。

定时触发器线程

JS引擎如果处于阻塞状态会影响浏览器定时计数器的计时准确性,使用单线程计时并触发定时更为合理。

事件触发线程

一个事件被触发时(onclick事件),该线程会将事件添加至任务队列中等待JS引擎处理。

...
setTimeout(function() {
    console.log("hello world.");
}, 2000);
...

JS运行至setTimeout函数时,会将function函数添加至任务队列中,等待主线程任务全部执行完毕之后才依次运行任务队列中的任务,直到运行至该函数时打印“hello,world.”。

HTTP异步请求线程

XMLHttpRequest在连接后是通过浏览器新开一个线程请求, 将检测到状态变更时,如果设置有回调函数,异步线程就产生状态变更事件放到 JavaScript引擎的处理队列中等待处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值