在前端面試時,面試官經常會問:瀏覽器是多行程還是單行程?
瀏覽器是多行程的,瀏覽器每一個 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/116186.html
標籤:JavaScript
上一篇:JavaScript連載5-資料轉換為Number與String、數字決議
下一篇:JS作用域和閉包核心面試題分析
