最直觀方法:打開更多工具中的任務管理器,可查看有幾個進程。
結論:
現代瀏覽器是多進程架構,包括:1個瀏覽器進程,1個網絡進程,1個GPU進程,多個渲染進程和多個插件進程。
通常情況下,打開2個頁面會有5個進程,即瀏覽器進程、網絡進程、GPU進程、兩個渲染進程。
特殊情況:
- 頁面中有插件,每個插件算一個進程
- 頁面有iframe,會運行在單獨的進程中
- 裝了擴展,也會佔用進程
- 如果兩個頁面屬於同一個站點,並且B從A中打開,會共用一個渲染進程。
例子:多標籤共用一個進程場景
並行併發概念:
並行:指的是兩個互不影響的獨立進程同時進行。
併發:指的是一個時間段內程序處於已啓動到完畢之間,且這幾個程序都是在同一個處理機上運行的(劃分時間段,幾個時間段來回切換執行程序,只是用戶感覺多個應用程序同時進行)
線程進程
多線程可以並行處理任務,但是線程是不能單獨存在的,是由進程來啓動管理。
線程執行出錯,會導致進程崩潰。
線程之間共享進程中的數據。
進程是一個程序的運行實例。啓動程序時,操作系統會爲其創建內存,用來存放代碼、數據和執行任務的主線程。
進程間相互獨立。
當進程關閉後,操作系統會回收進程所佔用的內存。
多進程解決單進程的問題
- 不穩定問題:進程相互隔離,一個崩潰,並不會影響其他頁面。
- 不流暢問題:js運行在渲染進程中,當前頁面阻塞,並不會影響其他頁面渲染進程。
- 安全問題:安全沙箱,插件進程和渲染進程沒有辦法獲取系統權限。
各進程作用
- 瀏覽器進程:負責頁面顯示,用戶交互,子進程管理,存儲功能。
- 渲染進程:將html、css、js轉換爲頁面,排版引擎blink和js引擎v8都在該進程中。沙箱模式。
- GPU進程:UI界面選擇用GPU繪製。
- 網絡進程:網絡資源加載;
- 插件進程:負責插件運行,插件易蹦,需要其來隔離,保證瀏覽器其他進程不受影響。
多進程構架的問題
- 更高資源佔用:每個進程都包含公共基礎結構(js運行環境),會佔用更多瀏覽器內存資源
- 更復雜的體系架構:瀏覽器模塊間的耦合性高、擴展性差
就有了 未來面向服務架構