瀏覽器本質上是運行在計算機操做系統下的一個應用軟件css
簡單地說, 就是操做系統能夠同時運行多個任務。
真正的並行執行多任務只能在多核CPU上實現,但在實際應用中,因爲任務數量遠遠多於CPU的核心數量,因此,操做系統也會自動把不少任務輪流調度到每一個核心上執行,讓各個任務交替執行,任務1執行0.01秒,切換到任務2,任務2執行0.01秒,再切換到任務3,執行0.01秒……這樣反覆執行下去。表面上看,每一個任務都是交替執行的,可是,因爲CPU的執行速度實在是太快了,咱們感受就像全部任務都在同時執行同樣。html
編寫完畢的代碼,在沒有運行的時候,咱們稱之爲程序
;正在運行着的代碼,就成爲進程
。
進程是系統資源分配的單位,簡單來講就是一段運行着的程序;
啓動一個進程時,系統會給它分配地址空間(每一個進程都有本身獨立的地址空間,因此互不影響),創建數據表來維護代碼段,堆棧信息,數據段,佔用不少資源.
進程之間有本身的通訊方式(IPC), ICP.git
線程就是系統資源調度的單位,是程序執行的最小單位;
能夠理解爲進程中執行代碼的指針
,線程存在於進程並執行程序任意部分
,由系統的調度算法來決定其如何運行.
線程是共享進程中的數據的,使用相同的地址空間;因此 cpu 切換線程很快,要比操做進程快;
線程間通訊快, 由於他們共享同一進程下的全局變量,靜態數據等; 固然這樣也會互相影響,利弊都有.github
1.用戶界面(user interface)
瀏覽器中菜單欄、地址欄、向前/回退按鈕、書籤目錄等除了頁面顯示窗口外的全部地方都屬於用戶界面。算法
2.瀏覽器引擎(browser engine)
瀏覽器引擎是各個組件之間通訊的核心,它在用戶界面與渲染引擎間傳遞指令。爲渲染引擎提供接口,將用戶界面上的給定的網址、用戶瀏覽器操做(如刷新、向前、退後等)信息提供給爲渲染引擎;同時,瀏覽器引擎 爲用戶界面提供各類如錯誤提示、資源下載進度等消息。還有,它能夠在客戶端本地緩存中讀寫數據。後端
3.渲染引擎(rendering engine)
渲染引擎負責顯示請求的內容。例如,若是請求的內容是HTML文件,則它負責解析文件裏的html、css等信息,並將網頁內容渲染呈現出來。渲染引擎的內部包括了html解析器、css解析器等。瀏覽器
4.網絡模塊(networking)
處理網絡請求,好比http請求網頁、圖片資源等。緩存
5.JavaScript解釋器(JavaScript interpreter)
網頁中常常有JS腳原本動態操做網頁,就是靠這個JS引擎來解析執行的。好比Chrome瀏覽器的V8引擎、Safari瀏覽器的JavaScriptCore引擎,IE的Chakracookie
6.界面後端(UI backend)
前面介紹的用戶界面是展現給用戶看到的,界面後端是瀏覽器的圖形庫,用來繪製基本的瀏覽器窗口內控件,如輸入框、按鈕、單選按鈕、組合框和窗口等,不一樣瀏覽器繪製的視覺效果不太想同,但功能基本都是同樣的。網絡
7.數據存儲(data persistence)
管理用戶數據,將與瀏覽會話相關聯的各類數據存儲在硬盤上,例如保存書籤、cookie、緩存、偏好設置等各類數據,可經過瀏覽器引擎提供的API進行調用。
瀏覽器本質上是一個軟件(應用程序),採用的是多進程架構,軟件在運行時會建立多個進程,協同工做,保證程序正常運行...
瀏覽器進程(主進程): 管理用戶交互(如地址欄,書籤...),子進程管理,文件存儲等(負責tab外的工做) 渲染進程(沙箱模式): 負責頁面渲染,JS腳本的執行,頁面事件的處理等,能夠同時開啓多個渲染進程(tab頁); > js引擎和 render引擎都運行在這個進程下 - 渲染線程(引擎) - js 線程(引擎) 網絡進程: 面向渲染進程和瀏覽器進程等提供網絡下載功能 GPU(圖形處理器)進程: 處理gpu任務,負責3D繪製 插件進程: 管理瀏覽器擴展程序等 其餘進程...