瀏覽器是多進程還是單進程?


在前端面試時,面試官經常會問:瀏覽器是多進程還是單進程?

瀏覽器是多進程的,瀏覽器每一個 tab 標簽都代表一個獨立的進程(也不一定,因為多個空白 tab 標簽會合並成一個進程),瀏覽器內核(瀏覽器渲染進程)屬於瀏覽器多進程中的一種。

瀏覽器每個進程有多個線程,主要有以下線程

1)GUI 渲染線程:

負責渲染頁面,解析 HTML,CSS 構成 DOM 樹等,當頁面重繪或者由於某種操作引起回流都會調起該線程。
和 JS 引擎線程是互斥的,當 JS 引擎線程在工作的時候,GUI 渲染線程會被掛起,GUI 更新被放入在 JS 任務隊列中,等待 JS 引擎線程空閑的時候繼續執行。

2)JS 引擎線程:

單線程工作,負責解析運行 JavaScript 腳本。
和 GUI 渲染線程互斥,JS 運行耗時過長就會導致頁面阻塞。

3)事件觸發線程:

當事件符合觸發條件被觸發時,該線程會把對應的事件回調函數添加到任務隊列的隊尾,等待 JS 引擎處理。

4)定時器觸發線程:

瀏覽器定時計數器並不是由 JS 引擎計數的,阻塞會導致計時不准確。
開啟定時器觸發線程來計時並觸發計時,計時完成后會被添加到任務隊列中,等待 JS 引擎處理。

5)http 請求線程:

http 請求的時候會開啟一條請求線程。
請求完成有結果了之后,將請求的回調函數添加到任務隊列中,等待 JS 引擎處理。

更多前端面試題庫:https://www.kancloud.cn/lsmsky/web_quiz


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM