Chrome瀏覽器爲何是多進程而不是多線程

豆皮粉兒們,又到了金三銀四的求職旺季,今天這一期由字節跳動數據平臺的「hmj不是黃燜雞」,給你們分享前端面試中可能會遇到一個關於瀏覽器的知識點「Chrome瀏覽器爲何是多進程而不是單進程」,該文幫你們梳理了知識點內容,讓大家能更好的理解~javascript

一年之計在於春,祝正在找新工做的大家,offer拿到手軟,money多多~ 下面👇就讓咱們開始閱讀吧。前端

5c6e7105-97d1-46b5-a71f-5958494f9332.gif

本文做者:hmj不是黃燜雞java


首先須要知道,進程和線程之間的關係是

  1. 進程中的任一線程出錯,均可能致使整個進程的崩潰。
  2. 線程之間是會共享進程中的數據。
  3. 進程之間的內容是相互隔離的,若是一個進程崩潰或者掛起了,是不會影響其餘進程的。進程間通信是經過IPC機制。
  4. 當進程關閉後,操做系統會回收進程所佔用的內存。

瀏覽器存在單進程架構、多進程架構

單進程架構的瀏覽器

全部的功能模塊都是運行在同一個進程裏的,可能會致使瀏覽器不穩定、不流暢和不安全。web

  • 不穩定

單進程瀏覽器的功能模塊運行在同一進程中,採用多線程的方式運行,若是有一個線程崩潰或者出現問題,就可能會致使整個進程崩潰。例如javascript環境是運行在頁面線程中的 ,可能會由於代碼的意外崩潰致使整個瀏覽器崩潰。面試

  • 不流暢

頁面渲染、頁面展示、JavaScript環境、插件等都是運行在同一個頁面線程中,意味着同一時刻只能有一個任務能夠執行。例如編寫一個無線循環的腳本運行在單進程瀏覽器頁面中,會獨佔頁面線程,致使其餘任務沒法執行,會致使整個瀏覽器失去響應、卡頓。另外頁面的內存泄露也是形成卡頓的一個緣由。瀏覽器

  • 不安全

插件或者腳本經過瀏覽器獲取系統權限,引起安全問題。安全

多進程架構的瀏覽器

Chrome的官方文檔markdown

採用多進程能夠使瀏覽器具有更好的容錯性,提供安全性和沙盒性。由於操做系統能夠提供方法限制每一個進程擁有的能力,因此瀏覽器可讓某些進程只能具有特定的功能,例如Chrome的Tab限制了對系統文件的讀寫能力, 可是多進程的瀏覽器有一個缺點,就是進程的內存佔用相對更多,可是Chrome爲了節省內存,會限制被啓動的進程數,當進程數到達界限後,會將訪問同一個網站的tab都放在一個進程裏運行。網絡

Chrome瀏覽器有哪些進程呢

  1. 瀏覽器進程(Browser Process),這個是瀏覽器的主進程,主要負責包括地址欄、前進後退按鈕、處理網絡訪問、文件訪問等。
  2. 渲染進程(Renderer Process),控制顯示網站的選項卡內的全部內容。
  3. 插件進程(Plugin Process),控制網站使用的全部插件。
  4. GPU(GPU Process),與其餘進程隔離處理GPU任務,因爲GPU處理來自多個應用程序的請求並將它們繪製在同一表面上,所以將其分爲不一樣的過程。
  5. 網絡進程(NetWork Process),負責頁面的網絡資源加載,以前是放在瀏覽器進程中的一個線程運行,如今獨立出來。

經過一個老生常談的面試題簡單梳理下瀏覽器各個進程之間的工做和流程 Chrome瀏覽器地址欄輸入一個URL後發生了什麼?多線程

  1. 在輸入一個地址的時候,瀏覽器進程中的UI線程會去解析是搜索內容仍是URL。
  2. 當用戶確認輸入內容,UI線程會將URL轉發給網絡進程,網絡進程會發起網絡請求等待響應。
  3. 網絡進程接收到響應頭數據,解析響應頭,並轉發給瀏覽器進程。
  4. 瀏覽器進程接收到響應頭數據後便發送CommitNavigation消息到渲染進程。
  5. 渲染進程開始準備接收HTML數據,經過和網絡進程創建數據管道接收數據。
  6. 渲染進程會反饋給瀏覽器進程「確認提交」,告知瀏覽器進程已經準備好接收頁面數據。
  7. 瀏覽器進程移除以前的舊文檔,更新頁面狀態。

面向服務化的架構

在Chrome的任務管理器中咱們能夠看到,Chrome已經在朝着這個方向變化,network service、storage service等都已是服務化,這樣這些功能既能夠放在不一樣的進程裏面運行也能夠合併爲一個獨立的進程。

相關文章
相關標籤/搜索