JavaScript 異步與同步

JavaScript 異步與同步

首先问畅,說一下什么是異步艾栋,什么是同步爆存。

具提詳細的定義網(wǎng)上一大堆,我這里僅僅說下我個人的理解蝗砾。

同步就是先较,只做一點事情,如果這個過程中需要等待悼粮,那么就空閑在哪里闲勺,等到得到了想要的結(jié)果再去繼續(xù)處理別的事情。舉個例子扣猫,在處理一些數(shù)據(jù)的時候菜循,需要做一個網(wǎng)絡(luò)請求,獲得處理所需的一些東西苞笨。所以债朵,要等到網(wǎng)絡(luò)返回結(jié)果后接著去處理剩下的邏輯。

等待的結(jié)果是一個漫長的過程瀑凝,萬一沒有結(jié)果呢序芦?

所以,才有了異步粤咪。異步就是一事情做到一半谚中,發(fā)現(xiàn)需要等待一段時間,這個時候我們把這個事情暫時放在一邊。去作別的事情宪塔,等到空閑的時候再去看我們做到一半的事情磁奖,有沒有具備條件可以寄繼續(xù)執(zhí)行。如果有那么就可以去執(zhí)行它某筐。

我們都知道JavaScript是一門同步執(zhí)行的語言比搭,但是我們在使用的時候卻又很多異步的操作如settimeout, ajax等南誊。這些操作是如何實現(xiàn)的呢身诺?

線程和進程

進程

  • 程序運行的實例
  • 同一個程序可以產(chǎn)生多個進程
  • 一個進程可以包含一個或者多個線程

線程

  • 操作系統(tǒng)中能都進行運算調(diào)度的最小單位
  • 一次只能執(zhí)行一個任務(wù)
  • 有自己的調(diào)用棧,寄存器環(huán)境
  • 同一個進程下的線程共享進程的資源

瀏覽器的進程

WX20200320-224418@2x.png
  • GUI線程 解析html抄囚,解析css霉赡,構(gòu)建dom樹等
  • js引擎線程,解析并執(zhí)行js幔托,與GUI線程互斥穴亏。長時間同步執(zhí)行js會導(dǎo)致GUI線性停頓,從而感覺瀏覽器卡主了重挑。
  • 定時器觸發(fā)線程:settimeout setinterval
  • 事件觸發(fā)線程:將滿足調(diào)試的事件嗓化,放入任務(wù)隊列
  • 網(wǎng)絡(luò)線程:用于處理一些網(wǎng)絡(luò)請求

定時器

代碼

settimeout(() => {
  console.log('我執(zhí)行了')
}, 2000)

上面就是我們使用定時器的一個簡單示例,具體執(zhí)行順序入下攒驰。

  1. 調(diào)用webapi蟆湖, 這個主要是要請求一個計時器故爵,
  2. 定時器即使2s玻粪,
  3. 事件觸發(fā)線程將時間翻入任務(wù)對了中
  4. 主線程通過eventLoop執(zhí)行

eventLoop是一個任務(wù)隊列,如果eventLoop中有元素诬垂,主線程會不斷的輪詢eventLoop中是否有元素劲室,如果就將其取出并執(zhí)行

定時器的弱點

  1. 定時器并不是嚴格準時的
  2. 定時器嵌套5次之后最小間隔不能低于4ms,不同的瀏覽器中有不同的實現(xiàn)结窘。

定時器的使用場景

  1. 防抖 節(jié)流
  2. 倒計時
  3. 定時器動畫很洋,有可能出現(xiàn)丟幀

參考文章

https://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
https://juejin.im/post/5bd7c761518825292d6b0217

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市隧枫,隨后出現(xiàn)的幾起案子喉磁,更是在濱河造成了極大的恐慌,老刑警劉巖官脓,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件协怒,死亡現(xiàn)場離奇詭異,居然都是意外死亡卑笨,警方通過查閱死者的電腦和手機孕暇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妖滔,你說我怎么就攤上這事隧哮。” “怎么了座舍?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵沮翔,是天一觀的道長。 經(jīng)常有香客問我曲秉,道長鉴竭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任岸浑,我火速辦了婚禮搏存,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘矢洲。我一直安慰自己璧眠,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布读虏。 她就那樣靜靜地躺著责静,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盖桥。 梳的紋絲不亂的頭發(fā)上灾螃,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音揩徊,去河邊找鬼腰鬼。 笑死,一個胖子當著我的面吹牛塑荒,可吹牛的內(nèi)容都是我干的熄赡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼齿税,長吁一口氣:“原來是場噩夢啊……” “哼彼硫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凌箕,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拧篮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后牵舱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體串绩,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年仆葡,在試婚紗的時候發(fā)現(xiàn)自己被綠了赏参。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片志笼。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖把篓,靈堂內(nèi)的尸體忽然破棺而出纫溃,到底是詐尸還是另有隱情,我是刑警寧澤韧掩,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布紊浩,位于F島的核電站,受9級特大地震影響疗锐,放射性物質(zhì)發(fā)生泄漏坊谁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一滑臊、第九天 我趴在偏房一處隱蔽的房頂上張望口芍。 院中可真熱鬧,春花似錦雇卷、人聲如沸鬓椭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽小染。三九已至,卻和暖如春贮折,著一層夾襖步出監(jiān)牢的瞬間裤翩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工调榄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踊赠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓振峻,卻偏偏與公主長得像臼疫,于是被迫代替她去往敵國和親择份。 傳聞我的和親對象是個殘疾皇子扣孟,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

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