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
相關文章
相關標籤/搜索