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

JavaScript之事件循環(huán)案例講解

 更新時間:2021年07月27日 10:01:59   作者:做一個優(yōu)秀的小前端  
這篇文章主要介紹了JavaScript之事件循環(huán)案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

js中的事件循環(huán)

因為JavaScript是單線程的,同一事件只能執(zhí)行一種方法,所以會將程序中的方法加入到執(zhí)行棧中按照后進先出的順序依次執(zhí)行,當遇見異步任務時不會被阻塞,而是將任務放入事件隊列中,繼續(xù)執(zhí)行執(zhí)行棧中的同步代碼,等當前執(zhí)行棧中的所有任務都執(zhí)行完畢則查找事件隊列中的任務,并把任務的回調(diào)函數(shù)放入執(zhí)行棧中,執(zhí)行其中的同步代碼,如此反復形成的循環(huán)被稱為事件循環(huán)。

node.js

node.js特點

事件驅(qū)動

從上向下執(zhí)行代碼,當遇到需要回調(diào)的地方就加入到事件隊列中,主線程運行完就去執(zhí)行事件隊列中的回調(diào)。整個過程不會阻塞新的事件,也不需要維護已經(jīng)建立的事件

非阻塞io

主線程空閑時,就開始循環(huán)事件隊列,處理事件隊列中的事件,如果該事件不是io任務就親自處理,如果是io任務,則交給線程池處理并指定回調(diào)函數(shù),然后繼續(xù)循環(huán)隊列中的其他事件,當阻塞操作完成后會將結(jié)果和回調(diào)函數(shù)放入隊列中,主線程循環(huán)到時就執(zhí)行該回調(diào)函數(shù)。

node.js優(yōu)缺點

優(yōu)點

  1. 高并發(fā):node.js用一個主線程處理所有的請求,然后對io操作進行異步處理,避開了創(chuàng)建、銷毀線程以及在線程之間切換所需的開銷和復雜性
  2. 適合io密集型應用

缺點:

  1. 不適合CPU密集型應用:長時間的計算會導致cpu時間片不能釋放,使得后續(xù)io事件無法發(fā)起
  2. 不能充分利用多核cpu
  3. 可靠性低,一旦代碼某個環(huán)節(jié)崩潰,整個系統(tǒng)都會崩潰

適用場景:

  1.  restful api:請求和響應只需少量的文本,不需要大量的邏輯處理??梢蕴幚頂?shù)萬條連接,只需請求api組織數(shù)據(jù)并返回即可
  2. 大量Ajax請求的場景中
  3. 聊天服務:輕量級,高流量,沒有復雜的計算邏輯

node.js的事件循環(huán) 

node事件循環(huán)依靠libuv引擎,v8解釋js代碼后調(diào)用對應的node api,這些api由libuv引擎驅(qū)動執(zhí)行對應任務,并把不同的事件放入不同的隊列中等待主線程執(zhí)行,因此node的事件循環(huán)存在于libuv引擎中

libuv引擎:實現(xiàn)了事件循環(huán)、文件操作等,是node.js實現(xiàn)異步的核心

node.js的單線程僅僅指JavaScript運行在單線程中,內(nèi)部可以通過線程池完成io操作

poll(查詢階段)---》check(檢查階段)---》close callback(關閉事件回調(diào)階段)---》timer(定時器檢測階段)---》io回調(diào)階段---》閑置階段---》輪詢階段

poll階段(輪詢階段):

v8將js代碼解析后傳入libuv引擎中,循環(huán)首先進入poll階段。先查看poll隊列是否有事件,有就按先進先出順序執(zhí)行回調(diào)

到此這篇關于JavaScript之事件循環(huán)案例講解的文章就介紹到這了,更多相關JavaScript之事件循環(huán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

文成县| 安义县| 龙里县| 岳西县| 唐河县| 合作市| 定兴县| 石家庄市| 海门市| 鄂州市| 含山县| 西乌珠穆沁旗| 建平县| 白沙| 屯昌县| 南阳市| 南昌县| 巴楚县| 冷水江市| 浦江县| 阿克陶县| 喀喇| 旅游| 梧州市| 鸡泽县| 涟源市| 保德县| 叙永县| 滁州市| 华蓥市| 安平县| 渑池县| 太保市| 桃源县| 区。| 修水县| 乐至县| 五台县| 九江县| 祁东县| 红河县|