瀏覽器的中進程與線程是什么-創(chuàng)新互聯(lián)

這篇文章主要介紹瀏覽器的中進程與線程是什么,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),五指山企業(yè)網(wǎng)站建設(shè),五指山品牌網(wǎng)站建設(shè),網(wǎng)站定制,五指山網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,五指山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

進程

進程是cpu的資源分配的最小單位。

多進程:多進程指的是在同一個時間里,同一個計算機系統(tǒng)中如果允許兩個或兩個以上的進程處于運行狀態(tài)。多進程帶來的好處是明顯的,比如你可以聽歌的同時,打開編輯器敲代碼,編輯器和聽歌軟件的進程之間絲毫不會相互干擾。

瀏覽器是多進程的,瀏覽器的進程主要包括以下幾種:

  1. Browser進程:瀏覽器的主進程(負(fù)責(zé)協(xié)調(diào),主控)

  2. 第三方插件進程:每種類型的插件對應(yīng)一個進程,僅當(dāng)使用該插件時才創(chuàng)建

  3. GPU進程:最多一個,用于3D繪制

  4. 瀏覽器渲染進程(內(nèi)核):默認(rèn)每個Tab頁面一個進程,互不影響,控制頁面渲染,腳本執(zhí)行,事件處理等(有時候會優(yōu)化,如多個空白tab會合并成一個進程)

在瀏覽網(wǎng)頁時,同時打開幾個新的頁面, 這就要打開幾個瀏覽窗口,但一旦開啟十幾個窗口,整個計算機就會越來越慢。

多進程瀏覽器的優(yōu)點

避免頁面渲染影響整個瀏覽器

避免第三方插件影響整個瀏覽器

多進程充分利用多核優(yōu)勢

方便使用沙盒模型隔離插件等進程,提高瀏覽器穩(wěn)定性

通俗的講,就是用戶打開多個窗口,如果其中一個窗口崩掉了,也不會影響整個瀏覽器,其他的界面照樣正常運行

線程

  • 一個進程由一個或多個線程組成,線程是一個進程中代碼的不同執(zhí)行路線;

  • 進程之間相互獨立,但同一進程下的各個線程之間共享程序的內(nèi)存空間(包括代碼段、數(shù)據(jù)集、堆等)及一些進程級的資源(如打開文件和信號)。

瀏覽器的渲染進程(瀏覽器內(nèi)核),是多線程的,主要以下幾大類:

  1. GUI線程

  2. Javascript引擎線程

  3. 事件觸發(fā)線程

  4. 定時器線程

  5. 網(wǎng)絡(luò)請求線程

GUI線程

負(fù)責(zé)渲染瀏覽器界面HTML元素,當(dāng)界面需要重繪(Repaint)或由于某種操作引發(fā)回流(reflow)時,該線程就會執(zhí)行。在Javascript引擎運行腳本期間,GUI渲染線程都是處于掛起狀態(tài)的,也就是說被”凍結(jié)”了.

Javascript引擎線程

也可以稱為JS內(nèi)核,主要負(fù)責(zé)處理Javascript腳本程序,例如V8引擎。Javascript引擎線程理所當(dāng)然是負(fù)責(zé)解析Javascript腳本,運行代碼。

Javascript是單線程的

這是因為Javascript這門腳本語言誕生的使命所致:JavaScript為處理頁面中用戶的交互,以及操作DOM樹、CSS樣式樹來給用戶呈現(xiàn)一份動態(tài)而豐富的交互體驗和服務(wù)器邏輯的交互處理。如果JavaScript是多線程的方式來操作這些UI DOM,則可能出現(xiàn)UI操作的沖突; 如果Javascript是多線程的話,在多線程的交互下,處于UI中的DOM節(jié)點就可能成為一個臨界資源,假設(shè)存在兩個線程同時操作一個DOM,一個負(fù)責(zé)修改一個負(fù)責(zé)刪除,那么這個時候就需要瀏覽器來裁決如何生效哪個線程的執(zhí)行結(jié)果。當(dāng)然我們可以通過鎖來解決上面的問題。但為了避免因為引入了鎖而帶來更大的復(fù)雜性,Javascript在最初就選擇了單線程執(zhí)行。

GUI 渲染線程 與 JavaScript引擎線程互斥!

由于JavaScript是可操縱DOM的,如果在修改這些元素屬性同時渲染界面(即JavaScript線程和UI線程同時運行),那么渲染線程前后獲得的元素數(shù)據(jù)就可能不一致了。因此為了防止渲染出現(xiàn)不可預(yù)期的結(jié)果,瀏覽器設(shè)置GUI渲染線程與JavaScript引擎為互斥的關(guān)系,當(dāng)JavaScript引擎執(zhí)行時GUI線程會被掛起,GUI更新會被保存在一個隊列中等到引擎線程空閑時立即被執(zhí)行。

JS阻塞頁面加載

由于GUI渲染線程與JavaScript執(zhí)行線程是互斥的關(guān)系,當(dāng)瀏覽器在執(zhí)行JavaScript程序的時候,GUI渲染線程會被保存在一個隊列中,直到JS程序執(zhí)行完成,才會接著執(zhí)行。因此如果JS執(zhí)行的時間過長,這樣就會造成頁面的渲染不連貫,導(dǎo)致頁面渲染加載阻塞的感覺。

定時觸發(fā)器線程

瀏覽器定時計數(shù)器并不是由JavaScript引擎計數(shù)的, 因為JavaScript引擎是單線程的, 如果處于阻塞線程狀態(tài)就會影響記計時的準(zhǔn)確, 因此通過單獨線程來計時并觸發(fā)定時是更為合理的方案。

事件觸發(fā)線程

當(dāng)一個事件被觸發(fā)時該線程會把事件添加到待處理隊列的隊尾,等待JS引擎的處理。這些事件可以是當(dāng)前執(zhí)行的代碼塊如定時任務(wù)、也可來自瀏覽器內(nèi)核的其他線程如鼠標(biāo)點擊、AJAX異步請求等,但由于JS的單線程關(guān)系所有這些事件都得排隊等待JS引擎處理。

異步http請求線程

在XMLHttpRequest在連接后是通過瀏覽器新開一個線程請求, 將檢測到狀態(tài)變更時,如果設(shè)置有回調(diào)函數(shù),異步線程就產(chǎn)生狀態(tài)變更事件放到 JavaScript引擎的處理隊列中等待處理。

以上是“瀏覽器的中進程與線程是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章題目:瀏覽器的中進程與線程是什么-創(chuàng)新互聯(lián)
文章路徑:http://muchs.cn/article6/dchoog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、關(guān)鍵詞優(yōu)化、App開發(fā)全網(wǎng)營銷推廣、網(wǎng)頁設(shè)計公司、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計