Chrome 中的进程架构

What is 进程 & 线程?

进程:一个程序的运行实例,操做系统会为其分配一块内存,用来存放代码、运行中的数据与执行任务的主线程;
线程:负责执行进程中的具体任务;css

单线程与多线程

多线程能够实现并行,提升任务执行效率;
线程越多越好吗?
No,CPU 资源是有限的,当线程过多时,会致使 CPU 切换频繁,对性能有很多损耗。 html

进程与线程的特色

  • 进程中任意线程出错,都会致使进程崩溃
  • 线程之间能够共享进程中的数据
  • 一个进程关闭后,操做系统会回收其内存
  • 进程之间内容相互隔离,避免互相影响

浏览器的演进过程

IE6 时代,一个浏览器开启的多个 tab 页都存在于一个进程下面,会致使如下问题:浏览器

  • 一个 tab 页崩溃会致使整个进程(浏览器)崩溃
  • 各个页面的数据均可以共享

Chrome 采用多进程架构来避免上述问题。服务器

  • 每一个 tab 页都至关于一个进程,一个崩溃不影响其余
  • 每一个进程都放在一个沙箱里,禁止读取硬盘上数据,即便进程里有恶意程序,也没法突破沙箱

最新 Chrome 包括的进程

  • 浏览器进程:负责界面显示、用户交互、子进程管理等功能
  • 渲染进程:负责解析 html,css,js;排版引擎 Blink 与 JS 的 V8 引擎都在该进程中;运行在沙箱模式下
  • GPU 进程:负责绘制 repaint 后的 UI 界面
  • 网络进程:负责页面网络资源加载
  • 插件进程:负责插件的运行,插件易崩溃,因此隔离出来

Chrome 中的任务管理器

由下图能够看出 Chrome 中包含的进程,相同域名的页面放在了同一进程下; 只要打开 Chrome,无论你用不用插件,他都会将每一个插件看成一个进程加载;(终于知道为啥之前的 4G 内存的电脑开个浏览器都那么卡,原来是这么多插件在背后偷偷加载了) 网络

浏览器里 UA 的做用

UA 是浏览器的身份证,会附带在 HTTP 请求的 user-agent 中,服务器根据不一样的 UA 返回不一样的页面内容,好比:手机和 PC 会返回不一样的样式。多线程

// 手机
"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"
// PC
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
复制代码

服务器会根据不一样的 UA 来设计不一样的页面;每一款新的浏览器若是使用本身独一无二的 UA,那么以前不少服务器要针对他作适配,这显然是不可能的。因此 Chrome 会使用 Mozilla,AppleWebkit 等关键字段表示同时支持这两个,而后再最后加上本身的表示 Chrome/xxx架构

Chrome 过去与如今架构对比

  • before
  • after
相关文章
相关标签/搜索