打開chrome,一次性打開了5個進程?!

圖片描述

打開chrome,一次性打開了5個進程?!

先解釋一下爲何會有這麼多個進程,再說爲何須要建立這麼多進程。

那是由於現代瀏覽器採用的都是多進程瀏覽器,每一個進程處理一個任務。 以chrome瀏覽器爲例,打開一個chrome瀏覽器最少會產生4個進程,分別是:c++

1. 瀏覽器進程
 2. 網絡進程
 3. GPU進程
 4. 頁面進程(正常狀況下一個頁面一個進程,特殊狀況下面詳細講)
 5. 插件進程(若是有插件的話,一個插件一個進程)

詳細以下圖:(如何查看下圖這種詳細的進程,chrome右上角三個點 --> 更多工具 --> 任務管理器)
圖片描述chrome

特殊狀況下,兩個頁面會共用一個頁面進程

chrome 默認每一個頁面一個進程,特殊狀況:若是你從當前頁面進入另外一個新的頁面,並且新頁面的域名和當前頁面同樣,那麼新頁面會共用當前頁面的頁面進程,以下圖:(場景:我從文章的評論者的名字進入了他的我的主頁)瀏覽器

圖片描述

那麼爲何chrome要建立這麼多進程,之前的單進程架構很差嗎?

先說說以前的單進程架構存在的問題安全

  1. 不流暢網絡

    • 插件:插件和頁面使用同一個進程,插件會堵塞頁面的加載
    • js: 其餘頁面js的死循環或者頁面資源加載慢會致使整個瀏覽器的其餘頁面加載都卡死或變慢。
  2. 不安全架構

    • 插件:插件的權限過大,能夠讀取和修改本地文件,甚至修改電腦配置文件(使用c/c++編寫的插件,能夠徹底控制你的電腦)。
    • js: js能夠經過瀏覽器的漏洞獲取電腦權限,接瀏覽器之手修改本機配置。
  3. 不穩定工具

    • 插件:插件大部分是第三方編寫的,水平良莠不齊,崩潰也是屢見不鮮,插件的崩潰將直接致使瀏覽器無響應或崩潰。
    • js: 一個頁面js的死循環或崩潰將致使其餘頁面也卡死或崩潰。

因此在多年的研究、開發後,多進程架構c位出道,基本解決了這些的問題spa

  1. 流暢性插件

    • 插件和頁面的js只能影響本身的進程,死循環或資源加載慢只能影響本身。(固然 現代瀏覽器特別吃cpu和內存資源,cpu內存吃滿了仍是會卡,多進程瀏覽器的缺點)
  2. 安全性code

    • 安全沙箱:系統對進程使用沙箱機制,沒法寫數據,只能讀有限的數據,一般是你當前域名下載的文件,將惡意插件和js的後門堵死了。
  3. 穩定性

    • 由於進程間是相互隔離的,因此當一個頁面或一個插件崩潰時,僅僅只會影響到當前頁面和那個插件自己,完美解決一顆老鼠屎的問題。

歡迎交流,有不完善的地方歡迎指出

相關文章
相關標籤/搜索