国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

基于真實案例淺談事件循環(huán)EventLoop

2022-05-28 15:52 作者:網(wǎng)星軟件  | 我要投稿

前情提要

為什么說是淺談呢?因為EventLoop的牽扯到的情況特別復雜也特別的龐大,一句兩句講不清楚,可能講著講著把自己就給講糊涂了。所以我們就由表及里,以結(jié)果為導向看看事件循環(huán)的運行機制。

什么是事件循環(huán)?

事件循環(huán)的本質(zhì)是在瀏覽器或者nodejs的環(huán)境中,運行時對js腳本的調(diào)度方式。

  1. 首先我們先了解下js為什么會有事件循環(huán)機制?

    • 我們都知道JavaScript是單線程的。所謂單線程,就可以理解為一個人的心一段時間只能放下一個人,分開了才能去存放另一個人,無法一心二用。但是如果按照這種情況走下去,假如代碼塊中遇到了計時器5秒甚至50秒后觸發(fā),那么整個程序都會因為還沒有到程序的執(zhí)行時間而停滯不前,進而進入假死狀態(tài)。這種情況自然是我們所不希望看到的,我們希望遇到此類需要等待的代碼時跳過去,先執(zhí)行不需要等待的代碼,最后再來執(zhí)行這些需要等待的代碼。于是JavaScript就引入了事件循環(huán)機制,來模擬多線程的效果。

    • 而實現(xiàn)這種效果的方式就是事件循環(huán)EventLoop機制

  2. 其次是如何實現(xiàn)這種機制

    • 同步任務(wù)為一個任務(wù)執(zhí)行棧(棧的規(guī)則是先進后出)

    • 異步任務(wù)是一個消息隊列(消息隊列的規(guī)則是先進先出)。

    • 同時還有瀏覽器提供的webApi,可以理解為瀏覽器自己提供的api會在另一個線程處理,處理完成后會自動塞到j(luò)s的消息隊列里。

    • 消息隊列又分為宏任務(wù)隊列和微任務(wù)隊列。

    • 該機制將js分為同步任務(wù)和異步任務(wù)。

    • 瀏覽器提供的api是宏任務(wù):setTimeout, setIntervalsetImmediate, ajaxnextTick, requestAnimationFrame, UI render...

    • js引擎提供的是微任務(wù):promise, async/await...

    • script中的js代碼也是宏任務(wù)

  3. 執(zhí)行優(yōu)先級

    • 同步任務(wù) => nextTick => 異步任務(wù) => setImmediate

從代碼執(zhí)行驗證上述理論

  • 注意事項:

    • process.nextTick只在node環(huán)境中生效。

總結(jié)

  • 在瀏覽器中事件循環(huán)除了js的處理還有ui線程的處理。每走完一輪js的便會走一遍ui的處理。以此往復形成事件循環(huán),但ui線程那塊暫時想不到演示示例,所以目前只演示了js這一塊。


基于真實案例淺談事件循環(huán)EventLoop的評論 (共 條)

分享到微博請遵守國家法律
延安市| 廉江市| 霍山县| 商水县| 三河市| 龙岩市| 舟山市| 高碑店市| 肥东县| 乐昌市| 北川| 四平市| 乐山市| 大城县| 普兰县| 塔河县| 祥云县| 中西区| 郧西县| 襄城县| 盐边县| 二连浩特市| 蓬莱市| 彰化县| 武穴市| 库尔勒市| 六枝特区| 鄱阳县| 广汉市| 天柱县| 石嘴山市| 潼南县| 晋宁县| 读书| 瓦房店市| 苏尼特右旗| 逊克县| 泰安市| 上饶市| 平昌县| 霍城县|