異步

同步任務(wù) && 異步任務(wù)

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

  • 同步任務(wù)是那些沒有被引擎掛起、在主線程上排隊(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ù)(采用回調(diào)函數(shù)的形式)才會(huì)進(jìn)入主線程執(zhí)行栓袖。排在異步任務(wù)后面的代碼匣摘,不用等待異步任務(wù)結(jié)束會(huì)馬上運(yùn)行,也就是說裹刮,異步任務(wù)不具有”堵塞“效應(yīng)音榜。

  • 舉例來說,Ajax 操作可以當(dāng)作同步任務(wù)處理捧弃,也可以當(dāng)作異步任務(wù)處理赠叼,由開發(fā)者決定。如果是同步任務(wù)违霞,主線程就等著 Ajax 操作返回結(jié)果嘴办,再往下執(zhí)行;如果是異步任務(wù)买鸽,主線程在發(fā)出 Ajax 請(qǐng)求以后涧郊,就直接往下執(zhí)行,等到 Ajax 操作有了結(jié)果眼五,主線程再執(zhí)行對(duì)應(yīng)的回調(diào)函數(shù)妆艘。

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

  • JavaScript 運(yùn)行時(shí),除了一個(gè)正在運(yùn)行的主線程看幼,引擎還提供一個(gè)任務(wù)隊(duì)列(task queue)批旺,里面是各種需要當(dāng)前程序處理的異步任務(wù)。
    首先桌吃,主線程會(huì)去執(zhí)行所有的同步任務(wù)朱沃,等到同步任務(wù)執(zhí)行完了,就去看任務(wù)隊(duì)列里面的異步任務(wù)茅诱。如果滿足條件逗物,那么異步任務(wù)就會(huì)進(jìn)入主線
    程開始執(zhí)行,這時(shí)他就變成同步任務(wù)了瑟俭。

  • 等到執(zhí)行完翎卓,下一個(gè)異步任務(wù)再進(jìn)入主線程開始執(zhí)行。一旦任務(wù)隊(duì)列清空摆寄,程序就結(jié)束執(zhí)行失暴。

  • 異步任務(wù)通常寫法是回調(diào)函數(shù),一旦異步任務(wù)進(jìn)入主線程微饥,就會(huì)執(zhí)行對(duì)應(yīng)的回調(diào)函數(shù)逗扒,如果異步任務(wù)沒有回調(diào)函數(shù),那么就不會(huì)進(jìn)入任務(wù)隊(duì)列欠橘,
    也就是說不會(huì)重新進(jìn)入主線程矩肩。

  • 那么問題來了,JS引擎是如何知道異步任務(wù)有沒有結(jié)果肃续,能不能進(jìn)入主線程呢黍檩?答案是JS引擎在不斷地檢查叉袍,一遍又一遍,只要同步任務(wù)執(zhí)行完了刽酱,引擎就會(huì)去檢查那些掛起來的異步任務(wù)喳逛,是不是可以進(jìn)入主線程。這種循環(huán)檢查的機(jī)制棵里,就是事件循環(huán)(Event Loop)润文。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市衍慎,隨后出現(xiàn)的幾起案子转唉,更是在濱河造成了極大的恐慌皮钠,老刑警劉巖稳捆,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異麦轰,居然都是意外死亡乔夯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門款侵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來末荐,“玉大人,你說我怎么就攤上這事新锈〖自啵” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵妹笆,是天一觀的道長(zhǎng)块请。 經(jīng)常有香客問我,道長(zhǎng)拳缠,這世上最難降的妖魔是什么墩新? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮窟坐,結(jié)果婚禮上海渊,老公的妹妹穿的比我還像新娘。我一直安慰自己哲鸳,他們只是感情好臣疑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著徙菠,像睡著了一般讯沈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上懒豹,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天芙盘,我揣著相機(jī)與錄音驯用,去河邊找鬼。 笑死儒老,一個(gè)胖子當(dāng)著我的面吹牛蝴乔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驮樊,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼薇正,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了囚衔?” 一聲冷哼從身側(cè)響起挖腰,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎练湿,沒想到半個(gè)月后猴仑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肥哎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年辽俗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篡诽。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崖飘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杈女,到底是詐尸還是另有隱情朱浴,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布达椰,位于F島的核電站翰蠢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏砰碴。R本人自食惡果不足惜躏筏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呈枉。 院中可真熱鬧趁尼,春花似錦、人聲如沸猖辫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啃憎。三九已至芝囤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悯姊。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工羡藐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悯许。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓仆嗦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親先壕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瘩扼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容