欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

javascript的執(zhí)行機(jī)制是什么-創(chuàng)新互聯(lián)

js是單線程的,為什么可以執(zhí)行異步操作呢?

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)服務(wù),網(wǎng)站設(shè)計(jì),網(wǎng)站托管運(yùn)營(yíng)等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競(jìng)爭(zhēng)對(duì)手中脫穎而出創(chuàng)新互聯(lián)。

這歸結(jié)與瀏覽器(js的宿主環(huán)境)通過(guò)某種方式使得js具備了異步的屬性。

區(qū)分進(jìn)程和線程:

進(jìn)程:正在運(yùn)行中的應(yīng)用程序。每個(gè)進(jìn)程都自己獨(dú)立的內(nèi)存空間。例如:打開(kāi)的瀏覽器就是一個(gè)進(jìn)程。

線程:進(jìn)程的子集,是獨(dú)立的。線程在共享的內(nèi)存空間中運(yùn)行。

瀏覽器是多進(jìn)程的。如下圖:

javascript的執(zhí)行機(jī)制是什么

并且每打開(kāi)一個(gè)頁(yè)面就創(chuàng)建了一個(gè)獨(dú)立的進(jìn)程。進(jìn)程內(nèi)有自己的多線程。如果瀏覽器是單進(jìn)程的,那么某個(gè)頁(yè)面崩了,就會(huì)影響整個(gè)瀏覽器。

瀏覽器有哪些進(jìn)程:

1、Browser(瀏覽器):瀏覽器的主進(jìn)程(負(fù)責(zé)協(xié)調(diào),主控)只有一個(gè),作用有:

? 負(fù)責(zé)瀏覽器界面顯示,與用戶交互。如前進(jìn),后退等

? 負(fù)責(zé)各個(gè)頁(yè)面的管理,創(chuàng)建和銷毀其他進(jìn)程

? 將Renderer(渲染器)進(jìn)程得到的內(nèi)存中的Bitmap,繪制到用戶界面上

? 網(wǎng)絡(luò)資源的管理,下載等

2、第三方插件進(jìn)程:每種類型的插件對(duì)應(yīng)一個(gè)進(jìn)程,僅當(dāng)使用該插件時(shí)才創(chuàng)建

3、GPU進(jìn)程:最多一個(gè),用于3D繪制等

4、瀏覽器渲染進(jìn)程(瀏覽器內(nèi)核)(Renderer(渲染器),內(nèi)部是多線程的)默認(rèn)每個(gè)Tab頁(yè)面一個(gè)進(jìn)程,互不影響。主要作用 :頁(yè)面渲染,腳本執(zhí)行,事件處理等

瀏覽器渲染進(jìn)程(瀏覽器內(nèi)核)包含的線程:

1、GUI渲染線程

? 負(fù)責(zé)渲染瀏覽器界面,解析HTML,CSS,構(gòu)建DOM樹(shù)和RenderObject樹(shù),布局和繪制等。

? 當(dāng)界面需要重繪(Repaint)或由于某種操作引發(fā)回流(reflow)時(shí),該線程就會(huì)執(zhí)行

? 注意,GUI渲染線程與JS引擎線程是互斥的,當(dāng)JS引擎執(zhí)行時(shí)GUI線程會(huì)被掛起(相當(dāng)于被凍結(jié)了),GUI更新會(huì)被保存在一個(gè)隊(duì)列中等到JS引擎空閑時(shí)立即被執(zhí)行。

2、JS引擎線程(

“JavaScript 引擎”通常被稱作一種 虛擬機(jī)。也稱為JS內(nèi)核,負(fù)責(zé)處理Javascript腳本程序。(例如V8引擎)

? JS引擎線程負(fù)責(zé)解析Javascript腳本,運(yùn)行代碼。

? JS引擎一直等待著任務(wù)隊(duì)列中任務(wù)的到來(lái),然后加以處理,一個(gè)Tab頁(yè)(renderer進(jìn)程)中無(wú)論什么時(shí)候都只有一個(gè)JS線程在運(yùn)行JS程序

? 同樣注意,GUI渲染線程與JS引擎線程是互斥的,所以如果JS執(zhí)行的時(shí)間過(guò)長(zhǎng),這樣就會(huì)造成頁(yè)面的渲染不連貫,導(dǎo)致頁(yè)面渲染加載阻塞。

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

? 歸屬于瀏覽器而不是JS引擎,用來(lái)控制事件循環(huán)(可以理解,JS引擎自己都忙不過(guò)來(lái),需要瀏覽器另開(kāi)線程協(xié)助)

? 當(dāng)JS引擎執(zhí)行代碼塊如setTimeOut時(shí)(也可來(lái)自瀏覽器內(nèi)核的其他線程,如鼠標(biāo)點(diǎn)擊、AJAX異步請(qǐng)求等),會(huì)將對(duì)應(yīng)任務(wù)添加到事件線程中

? 當(dāng)對(duì)應(yīng)的事件符合觸發(fā)條件被觸發(fā)時(shí),該線程會(huì)把事件添加到待處理隊(duì)列的隊(duì)尾,等待JS引擎的處理

? 注意,由于JS的單線程關(guān)系,所以這些待處理隊(duì)列中的事件都得排隊(duì)等待JS引擎處理(當(dāng)JS引擎空閑時(shí)才會(huì)去執(zhí)行)

4. 定時(shí)觸發(fā)器線程

? 傳說(shuō)中的setInterval與setTimeout所在線程

? 瀏覽器定時(shí)計(jì)數(shù)器并不是由JavaScript引擎計(jì)數(shù)的,(因?yàn)镴avaScript引擎是單線程的, 如果處于阻塞線程狀態(tài)就會(huì)影響記計(jì)時(shí)的準(zhǔn)確)

? 因此通過(guò)單獨(dú)線程來(lái)計(jì)時(shí)并觸發(fā)定時(shí)(計(jì)時(shí)完畢后,添加到事件隊(duì)列中,等待JS引擎空閑后執(zhí)行)

? 注意,W3C在HTML標(biāo)準(zhǔn)中規(guī)定,規(guī)定要求setTimeout中低于4ms的時(shí)間間隔算為4ms。

5、異步http請(qǐng)求線程

? 在XMLHttpRequest在連接后是通過(guò)瀏覽器新開(kāi)一個(gè)線程請(qǐng)求

? 將檢測(cè)到狀態(tài)變更時(shí),如果設(shè)置有回調(diào)函數(shù),異步線程就產(chǎn)生狀態(tài)變更事件,將這個(gè)回調(diào)再放入事件隊(duì)列中。再由JavaScript引擎執(zhí)行。

GUI渲染線程與JS引擎線程互斥:

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

js執(zhí)行機(jī)制:js是單線程的,每當(dāng)執(zhí)行函數(shù)就把函數(shù)推入棧中,但有異步的操作就讓瀏覽器的線程(webAPI)去處理,處理完放到任務(wù)隊(duì)列里,當(dāng)主線程(執(zhí)行棧)執(zhí)行完畢時(shí),如果任務(wù)隊(duì)列里有任務(wù),就執(zhí)行。

javascript的執(zhí)行機(jī)制是什么

這也就是為什么下面代碼會(huì)先輸出b,然后是a的原因。settimeout的函數(shù)會(huì)放到任務(wù)隊(duì)列中,而console.log('b')是主線程。

setTimeout(() => {
   console.log('a');
}, 0);
console.log('b');

以上就是淺談javascript執(zhí)行機(jī)制的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!


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

本文標(biāo)題:javascript的執(zhí)行機(jī)制是什么-創(chuàng)新互聯(lián)
瀏覽地址:http://aaarwkj.com/article14/iscge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、網(wǎng)站導(dǎo)航、網(wǎng)站收錄、服務(wù)器托管、標(biāo)簽優(yōu)化

廣告

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

成都網(wǎng)站建設(shè)
中文字幕一区二区中文字幕| 黄色录像三级黄色录像三级黄色| 欧美精品国产欧美精品国产| 国产精品免费观看在线国产| 国产在线观看一区二区三区精品| 日本啪啪精品一区二区三区| 日本道欧美一区二区aaaa| 日韩少妇人妻一区二区| 亚洲精品最新地址久久久| 夜色一区二区av人片| 粉嫩av北条麻妃电影| 欧美一级特黄大片做受| 久久久人妻精品少妇av| 亚洲成人福利免费网站| 日韩黄片一区二区三区| 亚洲国产成人欧美日韩另类| 午夜日韩综合激情视频在线观看| 欧美日韩精品不卡在线播放| 午夜影院在线免费观看三区| 亚洲欧美一区二区三区日本| 一区二区三区在线观看淫| 久久久久四虎国产精品| 亚洲一区二区三区日本久久| 亚洲国产日韩欧美一级| 亚洲精品丝袜成人偷拍| 亚洲国产精品午夜福利在线播放| 少妇视频资源一区二区三区| 亚洲综合久久精品少妇av| 亚洲国产精品自拍第一页| 麻豆人妻性色av专区| 99久久久国产精品蜜臀| 欧美日韩国产亚洲免费| 九色综合狠狠综合久久| 久久国产精品一区二区三区| 在线观看免费完整观看一区二区 | 日韩av不卡免费播放| 人妻黄色这里只有精品| 国产精品亚洲视频欧美视频| av东京热免费看一区| 中文字幕欧美精品日韩人妻| 美女张开腿让男人插进去|