線程 VS 進程
多線程可以並行處理任務,但是線程是不能單獨存在的,它是由進程來啓動和管理的
一個進程就是一個程序的運行實例。詳細解釋就是,啓動一個程序的時候,操作系統會爲該程序創建一塊內存,用來存放代碼、運行中的數據和一個執行任務的主線程,我們把這樣的一個運行環境叫進程。
線程是依附於進程的,而進程中使用多線程並行處理能提升運算效率。
總結來說,進程和線程之間的關係有以下 4 個特點。
- 進程中的任意一線程執行出錯,都會導致整個進程的崩潰。
- 線程之間共享進程中的數據。
- 當一個進程關閉之後,操作系統會回收進程所佔用的內存。
- 進程之間的內容相互隔離。
僅僅打開了 1 個頁面,爲什麼有 4 個進程?
因爲打開 1 個頁面至少需要 1 個網絡進程、1 個瀏覽器進程、1 個 GPU 進程以及 1 個渲染進程,共 4 個;如果打開的頁面有運行插件的話,還需要再加上 1 個插件進程。
不過凡事都有兩面性,雖然多進程模型提升了瀏覽器的穩定性、流暢性和安全性,但同樣不可避免地帶來了一些問題:
- 更高的資源佔用。因爲每個進程都會包含公共基礎結構的副本(如 JavaScript 運行環境),這就意味着瀏覽器會消耗更多的內存資源。
- 更復雜的體系架構。瀏覽器各模塊之間耦合性高、擴展性差等問題,會導致現在的架構已經很難適應新的需求了。
參考資料:極客時間《瀏覽器工作原理與實踐》,01 | Chrome架構:僅僅打開了1個頁面,爲什麼有4個進程?https://time.geekbang.org/col...