瀏覽器與進程和線程

瀏覽器是多線程的(多進程)

  • 每創建了一個Tab頁。就相當於一個獨立的瀏覽器進程。(瀏覽器的優化,一些進程被合併了)
  • 瀏覽器能運行:是因爲系統給它的進程分配了資源(cpu和內存)

瀏覽器有哪些進程

  • 瀏覽器主控進程(負責協調)
  • 第三方插件進程(使用插件時使用)
  • GPU進程瀏覽器(3D繪製)
  • 渲染進程(負責協調、腳本執行、事件處理)

爲什麼不是進程?

  • 一個崩潰影響整個進程。

4.最主要的是渲染進程:它是多線程的。

  1. GUI渲染線程:負責渲染解析html樹,css樹,構建dom樹和渲染樹。佈局繪製。他與js線程是互斥的,js執行時,gui會被掛起,gui會等待js引擎爲空時立即執行。
  2. JS引擎線程:負責處理js腳本。Js執行時間過長,會導致頁面渲染不連貫。一個tab頁無論如何只有一個js線程在執行js程序。
  3. 事件觸發線程:歸屬於瀏覽器,而不是js引擎。用來控制循環(理解爲瀏覽器忙不過來)。當JS引擎執行代碼塊如setTimeout(異步任務)時。線程會把事件添加到隊列末尾,等待js引擎處理。
  4. 定時觸發線程:計時器不是由js引擎計數的,添加到事件隊列中,通過線程計時,當計時完畢後,添加到事件隊列中。等待js引擎空閒時處理。
  5. 異步http請求。Xmlhttprequset連接後,會通過先開一個線程請求,檢測到狀態變更時,將回調放入事件隊列裏。由js引擎處理。

瀏覽器進程和瀏覽器內核的通信過程。

  1. 首先瀏覽器進程獲取用戶請求,首先需要獲取頁面內容(比如通過網絡下載資源)。隨後將該任務通過接口傳給渲染進程,然後開始渲染。
  2. 渲染進程接的接口收到信息。交給渲染線程,然後開始渲染。
  3. 渲染線程開始渲染頁面,這其間可能借助瀏覽器進程獲取資源,GPU來幫助渲染。最後渲染進程把結果傳給瀏覽器進程
  4. 瀏覽器進程收到結果並將結果繪製出來。

爲什麼互斥js引擎和gui渲染線程?

  • 防止元素數據前後不一樣。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章