瀏覽器的線程和進程

線程 VS 進程

多線程可以並行處理任務,但是線程是不能單獨存在的,它是由進程來啓動和管理的

一個進程就是一個程序的運行實例。詳細解釋就是,啓動一個程序的時候,操作系統會爲該程序創建一塊內存,用來存放代碼、運行中的數據和一個執行任務的主線程,我們把這樣的一個運行環境叫進程

單線程與多線程的進程對比圖

線程是依附於進程的,而進程中使用多線程並行處理能提升運算效率。

總結來說,進程和線程之間的關係有以下 4 個特點。

  1. 進程中的任意一線程執行出錯,都會導致整個進程的崩潰。
  2. 線程之間共享進程中的數據。
  3. 當一個進程關閉之後,操作系統會回收進程所佔用的內存。
  4. 進程之間的內容相互隔離。

僅僅打開了 1 個頁面,爲什麼有 4 個進程?

因爲打開 1 個頁面至少需要 1 個網絡進程、1 個瀏覽器進程、1 個 GPU 進程以及 1 個渲染進程,共 4 個;如果打開的頁面有運行插件的話,還需要再加上 1 個插件進程。

不過凡事都有兩面性,雖然多進程模型提升了瀏覽器的穩定性、流暢性和安全性,但同樣不可避免地帶來了一些問題:

  • 更高的資源佔用。因爲每個進程都會包含公共基礎結構的副本(如 JavaScript 運行環境),這就意味着瀏覽器會消耗更多的內存資源。
  • 更復雜的體系架構。瀏覽器各模塊之間耦合性高、擴展性差等問題,會導致現在的架構已經很難適應新的需求了。

參考資料:極客時間《瀏覽器工作原理與實踐》,01 | Chrome架構:僅僅打開了1個頁面,爲什麼有4個進程?https://time.geekbang.org/col...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章