摘要:瀏覽器的渲染進程瀏覽器內核,是多線程的,主要以下幾大類線程引擎線程事件觸發線程定時器線程網絡請求線程線程負責渲染瀏覽器界面元素當界面需要重繪或由于某種操作引發回流時該線程就會執行。
進程
進程是cpu的資源分配的最小單位。
多進程:多進程指的是在同一個時間里,同一個計算機系統中如果允許兩個或兩個以上的進程處于運行狀態。多進程帶來的好處是明顯的,比如你可以聽歌的同時,打開編輯器敲代碼,編輯器和聽歌軟件的進程之間絲毫不會相互干擾。
瀏覽器是多進程的,瀏覽器的進程主要包括以下幾種:Browser進程:瀏覽器的主進程(負責協調,主控)
第三方插件進程:每種類型的插件對應一個進程,僅當使用該插件時才創建
GPU進程:最多一個,用于3D繪制
瀏覽器渲染進程(內核):默認每個Tab頁面一個進程,互不影響,控制頁面渲染,腳本執行,事件處理等(有時候會優化,如多個空白tab會合并成一個進程)
在瀏覽網頁時,同時打開幾個新的頁面, 這就要打開幾個瀏覽窗口,但一旦開啟十幾個窗口,整個計算機就會越來越慢。
多進程瀏覽器的優點避免頁面渲染影響整個瀏覽器
避免第三方插件影響整個瀏覽器
多進程充分利用多核優勢
方便使用沙盒模型隔離插件等進程,提高瀏覽器穩定性
通俗的講,就是用戶打開多個窗口,如果其中一個窗口崩掉了,也不會影響整個瀏覽器,其他的界面照樣正常運行
線程一個進程由一個或多個線程組成,線程是一個進程中代碼的不同執行路線;
進程之間相互獨立,但同一進程下的各個線程之間共享程序的內存空間(包括代碼段、數據集、堆等)及一些進程級的資源(如打開文件和信號)。
瀏覽器的渲染進程(瀏覽器內核),是多線程的,主要以下幾大類:GUI線程
Javascript引擎線程
事件觸發線程
定時器線程
網絡請求線程
GUI線程負責渲染瀏覽器界面HTML元素,當界面需要重繪(Repaint)或由于某種操作引發回流(reflow)時,該線程就會執行。在Javascript引擎運行腳本期間,GUI渲染線程都是處于掛起狀態的,也就是說被”凍結”了.
Javascript引擎線程也可以稱為JS內核,主要負責處理Javascript腳本程序,例如V8引擎。Javascript引擎線程理所當然是負責解析Javascript腳本,運行代碼。
Javascript是單線程的這是因為Javascript這門腳本語言誕生的使命所致:JavaScript為處理頁面中用戶的交互,以及操作DOM樹、CSS樣式樹來給用戶呈現一份動態而豐富的交互體驗和服務器邏輯的交互處理。如果JavaScript是多線程的方式來操作這些UI DOM,則可能出現UI操作的沖突; 如果Javascript是多線程的話,在多線程的交互下,處于UI中的DOM節點就可能成為一個臨界資源,假設存在兩個線程同時操作一個DOM,一個負責修改一個負責刪除,那么這個時候就需要瀏覽器來裁決如何生效哪個線程的執行結果。當然我們可以通過鎖來解決上面的問題。但為了避免因為引入了鎖而帶來更大的復雜性,Javascript在最初就選擇了單線程執行。
GUI 渲染線程 與 JavaScript引擎線程互斥!由于JavaScript是可操縱DOM的,如果在修改這些元素屬性同時渲染界面(即JavaScript線程和UI線程同時運行),那么渲染線程前后獲得的元素數據就可能不一致了。因此為了防止渲染出現不可預期的結果,瀏覽器設置GUI渲染線程與JavaScript引擎為互斥的關系,當JavaScript引擎執行時GUI線程會被掛起,GUI更新會被保存在一個隊列中等到引擎線程空閑時立即被執行。
JS阻塞頁面加載由于GUI渲染線程與JavaScript執行線程是互斥的關系,當瀏覽器在執行JavaScript程序的時候,GUI渲染線程會被保存在一個隊列中,直到JS程序執行完成,才會接著執行。因此如果JS執行的時間過長,這樣就會造成頁面的渲染不連貫,導致頁面渲染加載阻塞的感覺。
定時觸發器線程瀏覽器定時計數器并不是由JavaScript引擎計數的, 因為JavaScript引擎是單線程的, 如果處于阻塞線程狀態就會影響記計時的準確, 因此通過多帶帶線程來計時并觸發定時是更為合理的方案。
事件觸發線程當一個事件被觸發時該線程會把事件添加到待處理隊列的隊尾,等待JS引擎的處理。這些事件可以是當前執行的代碼塊如定時任務、也可來自瀏覽器內核的其他線程如鼠標點擊、AJAX異步請求等,但由于JS的單線程關系所有這些事件都得排隊等待JS引擎處理。
異步http請求線程在XMLHttpRequest在連接后是通過瀏覽器新開一個線程請求, 將檢測到狀態變更時,如果設置有回調函數,異步線程就產生狀態變更事件放到 JavaScript引擎的處理隊列中等待處理。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108658.html
摘要:瀏覽器的渲染進程瀏覽器內核,是多線程的,主要以下幾大類線程引擎線程事件觸發線程定時器線程網絡請求線程線程負責渲染瀏覽器界面元素當界面需要重繪或由于某種操作引發回流時該線程就會執行。 進程 進程是cpu的資源分配的最小單位。 多進程:多進程指的是在同一個時間里,同一個計算機系統中如果允許兩個或兩個以上的進程處于運行狀態。多進程帶來的好處是明顯的,比如你可以聽歌的同時,打開編輯器敲代碼,編...
摘要:瀏覽器的渲染進程瀏覽器內核,是多線程的,主要以下幾大類線程引擎線程事件觸發線程定時器線程網絡請求線程線程負責渲染瀏覽器界面元素當界面需要重繪或由于某種操作引發回流時該線程就會執行。 進程 進程是cpu的資源分配的最小單位。 多進程:多進程指的是在同一個時間里,同一個計算機系統中如果允許兩個或兩個以上的進程處于運行狀態。多進程帶來的好處是明顯的,比如你可以聽歌的同時,打開編輯器敲代碼,編...
摘要:若以多線程的方式操作這些,則可能出現操作的沖突。另外,因為是單線程的,在某一時刻內只能執行特定的一個任務,并且會阻塞其它任務執行。瀏覽器事件觸發線程事件觸發線程,當一個事件被觸發時該線程會把事件添加到任務隊列的隊尾,等待引擎的處理。 首先,說下為什么 JavaScript 是單線程? 總所周知,JavaScript是以單線程的方式運行的。說到線程就自然聯想到進程。那它們有什么聯系呢? ...
閱讀 3659·2021-10-11 10:58
閱讀 2249·2021-10-08 10:05
閱讀 2030·2021-09-27 13:34
閱讀 3569·2019-08-30 15:53
閱讀 2729·2019-08-30 14:02
閱讀 3560·2019-08-29 16:55
閱讀 622·2019-08-29 15:41
閱讀 1067·2019-08-29 15:23