在正式開始講進程和線程以前首先須要理解的一個概念就是並行處理,由於當你理解了並行處理以後,你對進程和線程的理解就會輕鬆不少。瀏覽器
從字面意思就能夠理解,並行處理的意思就是,同一時刻處理多個任務。好比咱們要計算下面兩個表達式的值:安全
A = 1 + 2 B = 2 + 3
從代碼編譯的角度這個過程能夠被拆分爲三部分:網絡
若是咱們使用單線程來處理,瀏覽器就會按照我上面的步驟分3步來執行。多線程
若是採用多線程最後的結果會是怎樣的呢?架構
多線程只須要分兩步來進行處理:操作系統
首先須要明確的一個概念是,線程是不能夠單獨存在的,線程是依賴於進程而存在的而。插件
那什麼是進程呢?線程
一個進程就是一個程序的運行實例。設計
官方的解釋是,啓動一個程序的時候,操做系統會爲該程序建立一塊內存,用來存放代碼、運行中的數據和一個執行任務的主線程,咱們把這樣一個運行環境叫作進程。code
進程中的任何一個線程執行出錯,都會致使整個進程奔潰
舉一個例子:
A = 1 * 0 B = 2 / 0
當上面的程序在計算 B 的時候,因爲分母爲 0 ,會致使執行出錯,由於線程執行出錯會致使整個進程的崩潰,進程一旦崩潰,其餘線程的執行也就沒有結果了。
線程之間能夠對進程中的公共數據進行操做。
當一個進程退出時,操做系統會回收該進程所佔用的全部資源;即便其中任意線程因操做不當致使內存泄漏,所佔用的內存也會被正確回收。
進程隔離是爲了保護操做系統中各自的進程互不干擾,每個進程只能訪問本身所佔有的數據,這樣就避免了進程A寫入數據到進程B的狀況出現。
同時,也正由於進程之間的數據是相互隔離的,因此當一個進程崩潰了或者是掛起了,是不會影響到其餘的進程的。
可是進程之間也不是絕對的隔離,若是進程之間須要數據的通訊,這個時候,就須要使用進程間通訊(IPC) 的機制了。
最新的 Chrome 瀏覽器包括:1個瀏覽器主進程、1個GPU進程、1個網絡進程、多個渲染進程和多個插件進程。
下面咱們來講說這幾個進程的主要功能:
雖然多進程模型提升了瀏覽器的穩定性、流暢性和安全性,但一樣布不可避免的帶來了一些問題:
爲了解決目前的瀏覽器架構所帶來的問題,在2016年,Chrome 官方團隊使用」面向服務的架構「的思想設計了新的 Chrome 架構。
也就是說 Chrome 總體架構會朝向現代操做系統所採用的」面向服務的架構「方向發展,原來的各類模塊會被重構成獨立的服務,每一個服務均可以在獨立的進程中運行,訪問服務必須使用定義好的接口,經過 IPC 來通訊,從而構建一個更內聚、鬆耦合、易於維護和擴展的系統,更好的實現 Chrome 簡單、穩定、高速、安全的目標。