最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript Event Loop相關(guān)原理解析

 更新時(shí)間:2020年06月10日 11:20:30   作者:重科前端小鑫  
這篇文章主要介紹了JavaScript Event Loop相關(guān)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1.單線程模型

單線程模型指的是,JavaScript只能在一個(gè)線程上運(yùn)行,也就是說(shuō)只能同時(shí)指向一個(gè)任務(wù),其他任務(wù)都必須在后面排隊(duì)等待。注意:雖然JavaScript只在一個(gè)線程上運(yùn)行,但并不代碼JavaScript引擎只有一個(gè)線程。事實(shí)上,JavaScript引擎有多個(gè)線程,單個(gè)腳本只能在一個(gè)線程上運(yùn)行(主線程),其他線程都是在后臺(tái)配合。

JavaScript為什么要采用單線程,而不是多線程?

不想讓瀏覽器變得復(fù)雜(避免復(fù)雜性),因?yàn)槎嗑€程需要共享資源、且可能修改彼此運(yùn)行的結(jié)果。

該模式會(huì)導(dǎo)致的問(wèn)題?

如果單個(gè)任務(wù)耗時(shí)長(zhǎng),會(huì)拖延整個(gè)程序的執(zhí)行,可能導(dǎo)致瀏覽器無(wú)響應(yīng)(假死)

JavaScript是如何解決這個(gè)問(wèn)題的?

因?yàn)閱尉€程的原因,CPU很多時(shí)候都閑著的,并且因?yàn)镮O操作(輸入輸出)很慢(比如Ajax操作從網(wǎng)絡(luò)讀取數(shù)據(jù)),這時(shí)CPU可以完全不管IO操作,掛起等待中的任務(wù),先運(yùn)行排在后面的任務(wù)。等到IO操作返回了結(jié)果,再回過(guò)頭,把掛起的任務(wù)繼續(xù)執(zhí)行下去。這種機(jī)制就是JavaScript內(nèi)部采用的“事件循環(huán)”機(jī)制(Event Loop)

2.同步任務(wù)和異步任務(wù)

程序里面所有的任務(wù),可以分成兩類(lèi):同步任務(wù)(synchronous)和異步任務(wù)(asynchronous)

同步任務(wù):沒(méi)有被引擎掛起、在主線程上排隊(duì)執(zhí)行的任務(wù)。只有前一個(gè)任務(wù)執(zhí)行完畢,才能執(zhí)行后一個(gè)任務(wù)。

異步任務(wù):被引擎放一邊、不進(jìn)行主線程、而進(jìn)入任務(wù)隊(duì)列的任務(wù)。只有引擎認(rèn)為某個(gè)異步任務(wù)可以執(zhí)行了(比如Ajax操作從服務(wù)器得到了結(jié)果),那么該任務(wù)(通過(guò)回調(diào)函數(shù)的形式)才能進(jìn)入主線程執(zhí)行。排在異步任務(wù)后面的代碼,不用等到異步任務(wù)結(jié)束就會(huì)馬上運(yùn)行,也就是說(shuō),異步任務(wù)不具有“堵塞”效應(yīng)

3.任務(wù)隊(duì)列和事件循環(huán)

JavaScript運(yùn)行時(shí),除了一個(gè)正在運(yùn)行的主線程(又稱(chēng)為“調(diào)用棧(call stack)”),引擎還提供了一個(gè)任務(wù)隊(duì)列(task queue),里面是各種需要處理當(dāng)前程序處理的異步任務(wù)。(實(shí)際上,根據(jù)異步任務(wù)的類(lèi)型,存在多個(gè)任務(wù)隊(duì)列,后面再詳講)

1.主線程會(huì)去執(zhí)行所有的同步任務(wù)。

2.等到同步任務(wù)全部執(zhí)行完,查看任務(wù)隊(duì)列中的異步任務(wù),將滿足條件的重新進(jìn)入主線程開(kāi)始執(zhí)行,這時(shí)候就變成同步任務(wù)。

3.等任務(wù)執(zhí)行完,下一個(gè)異步任務(wù)再進(jìn)入主線程開(kāi)始執(zhí)行。

4.引擎不停檢查(“事件循環(huán)”),一旦任務(wù)隊(duì)列清空,程序就結(jié)束執(zhí)行。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Javascript改變CSS樣式(局部和全局)

    Javascript改變CSS樣式(局部和全局)

    改變CSS樣式分為局部和全局,下面為大家介紹下使用Javascript具體的實(shí)現(xiàn),感興趣的朋友可以參考下
    2013-12-12
  • JS動(dòng)態(tài)遍歷json中所有鍵值對(duì)的方法(不知道屬性名的情況)

    JS動(dòng)態(tài)遍歷json中所有鍵值對(duì)的方法(不知道屬性名的情況)

    這篇文章主要介紹了JS動(dòng)態(tài)遍歷json中所有鍵值對(duì)的方法,實(shí)例分析了針對(duì)不知道屬性名的情況簡(jiǎn)單遍歷json鍵值對(duì)的操作技巧,需要的朋友可以參考下
    2016-12-12
  • JavaScript 實(shí)現(xiàn)生命游戲

    JavaScript 實(shí)現(xiàn)生命游戲

    這篇文章主要介紹了JavaScript 實(shí)現(xiàn)生命游戲的示例步驟,幫助大家更好的理解和學(xué)習(xí)使用JavaScript,感興趣的朋友可以了解下
    2021-04-04
  • swiper移動(dòng)端輪播插件(觸碰圖片之后停止輪播)

    swiper移動(dòng)端輪播插件(觸碰圖片之后停止輪播)

    這篇文章主要為大家詳細(xì)介紹了swiper移動(dòng)端輪播插件,觸碰圖片之后停止輪播,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • video.js使用改變ui過(guò)程

    video.js使用改變ui過(guò)程

    這篇文章主要介紹了video.js使用改變ui的過(guò)程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • JavaScript異步編程操作實(shí)現(xiàn)介紹

    JavaScript異步編程操作實(shí)現(xiàn)介紹

    異步(Asynchronous, async)是與同步(Synchronous, sync)相對(duì)的概念。在我們學(xué)習(xí)的傳統(tǒng)單線程編程中,程序的運(yùn)行是同步的,同步不意味著所有步驟同時(shí)運(yùn)行,而是指步驟在一個(gè)控制流序列中按順序執(zhí)行,而異步的概念則是不保證同步的概念
    2022-09-09
  • js+canvas實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證碼功能

    js+canvas實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證碼功能

    這篇文章主要介紹了js+canvas實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證碼功能,本文結(jié)合實(shí)例代碼分步驟給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-03-03
  • js?promise?中使用?setTimeout?實(shí)現(xiàn)暫停執(zhí)行的效果

    js?promise?中使用?setTimeout?實(shí)現(xiàn)暫停執(zhí)行的效果

    這篇文章主要介紹了js?promise?中使用?setTimeout?實(shí)現(xiàn)暫停執(zhí)行的,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • JS解析XML實(shí)例分析

    JS解析XML實(shí)例分析

    這篇文章主要介紹了JS解析XML的方法,實(shí)例分析了javascript針對(duì)IE瀏覽器與非IE瀏覽器解析XML文件的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-01-01
  • BootStrap入門(mén)學(xué)習(xí)第一篇

    BootStrap入門(mén)學(xué)習(xí)第一篇

    這篇文章主要為大家詳細(xì)介紹了BootStrap入門(mén)學(xué)習(xí)第一篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評(píng)論

凤城市| 手机| 樟树市| 行唐县| 白山市| 航空| 尚义县| 枣强县| 秦皇岛市| 江门市| 长治市| 汉沽区| 岳阳市| 临江市| 太白县| 商河县| 多伦县| 年辖:市辖区| 垫江县| 德清县| 香河县| 紫金县| 大冶市| 南皮县| 北票市| 南安市| 赞皇县| 阿拉善左旗| 南投县| 鹤峰县| 禹城市| 孝昌县| 肃南| 博乐市| 信丰县| 安康市| 丽水市| 泰宁县| 武平县| 溧阳市| 泰和县|