趣玩 Kyiplay
  • 親子飯店
  • 親子景點
  • 親子餐廳
  • 育兒好物
  • 育兒經驗
  • 生活

Archives

  • 2025 年 6 月
  • 2025 年 5 月
  • 2025 年 3 月
  • 2023 年 4 月
  • 2023 年 3 月
  • 2023 年 2 月
  • 2022 年 12 月
  • 2022 年 11 月
  • 2021 年 1 月
  • 2020 年 12 月
  • 2020 年 11 月
  • 2020 年 10 月
  • 2020 年 9 月
  • 2020 年 8 月
  • 2020 年 5 月
  • 2020 年 4 月
  • 2020 年 3 月
  • 2020 年 2 月
  • 2020 年 1 月
  • 2019 年 10 月
  • 2019 年 9 月

Categories

  • 懶人包
  • 生活
  • 研究
  • 程式
  • 育兒好物
  • 育兒經驗
  • 行銷
  • 親子景點
  • 親子餐廳
  • 隨筆
趣玩 Kyiplay
趣玩 Kyiplay
  • 親子飯店
  • 親子景點
  • 親子餐廳
  • 育兒好物
  • 育兒經驗
  • 生活

event loop 是什麼?|Alpha Camp 學期 2-2期末驗收


這是我記錄自學程式,Alpha Camp 學期2-2的期末驗收筆記。
回顧:Alpha Camp 學期 2-2心得,認識API, HTTP, Ajax

學期2-2是Alpha Camp第二學期的第二階段,目標是學會API,透過瀏覽器要資料。

每階段的尾聲都會有期末驗收,學期2-2的驗收有別於以往解程式題目,這次是比較特別的兩個要求:

  • 研究還看不懂的內容,搞懂它後並輸出成筆記
  • 利用ORID框架回顧自己的進步

本篇內容是「研究還看不懂的內容,搞懂它後並輸出成筆記」。

期末驗收 – 消失的延遲?

題目的開頭給了段程式碼,要我們思考程式結果會是什麼?

setTimeout(function(){console.log('delay 0 sec')}, 0)
console.log('Hello!')

setTimeout是在JavaScript(後稱JS)中,功能為「倒數計時」的函式。從上程式碼字面意義看來,會期待程式結果:

  1. 先 console.log(‘delay 0 sec’)
  2. 再 console.log(‘Hello!’)

但實際執行的結果卻是:

setTimeout-會進入-task-queue.png
結果居然先執行:第二行 console.log(‘Hello!’)

為理解「為何是 console.log(‘Hello!’) 先跑出結果」,得先認識「event loop」。這次Alpha Camp給了釣竿,讓我們自己找出魚吃,找出「為何setTimeout延遲0秒,仍然有延遲」

AC給的釣竿:

What the heck is the event look anyway?

event loop 是什麼?

影片14:10處,講者提到 event loop是:「look at the stack and look at the task queue. if the stack is empty, it takes the first thing on the queue and pushes it onto the stack which effectively runs it.」

用中文說就是:

  1. 當stack裡的所有任務執行完成後(empty)
  2. 將task queue裡的任務依序一個個放進stack裡執行

循環這兩個步驟,步驟直到stack跟task queue內的任務都執行完畢。

Bang! setTimeout進入了task queue

在理解event loop運作後,就可以解釋為何會出現「消失的延遲」。

因為 setTimeout的callback function進入task queue,所以須等在stack的console.log(‘Hello!’)跑完,才會接著跑 task queue內的console.log(‘delay 0 sec’):

  1. stack執行程式,setTimeout(function(){console.log(‘delay 0 sec’)}, 0)
  2. setTimeout 裡的callback(console.log(‘delay 0 sec’))進入 task queue等待
  3. stack執行程式,console.log(‘Hello!’)
  4. task queue任務轉進 stack,執行callback(console.log(‘delay 0 sec’))
消失的延遲-執行過程
消失的延遲 – 執行過程

其他知識點

block

當人說:不要block(阻塞) event loop時,

他指得是:不要在stack上放慢到不行的程式,這樣會造成很差的使用者體驗。(瀏覽器無法執行該做的事,全部的事都在task queue等stack結束才能被執行)

stack 與 task queue

  • stack
    等待執行的任務會放入一個堆疊 (stack),被稱為 Call stack
  • task queue
    各種非同步事件會在 task queue 中暫存,等待stack清空後轉入 stack

callback

回調,任何一個函式所呼叫的任何一種函式,簡稱cb。

例如「消失的延遲」中 setTimeout(function(){console.log(‘delay 0 sec’)}, 0),function(){console.log(‘delay 0 sec’)}, 0 就是一個 callback。

單執行緒 與 多執行緒

  • 單執行緒:一次只能處理一件事
    JS 就是屬於單執行緒(單線程),所以一次只能執行一個任務。
  • 多執行緒:一次可以處理多件事
    瀏覽器則是屬於多執行緒(多線程),setTimeout就是瀏覽器開放給JS的API,因此setTimeout的call back才能進入task queue。

v8引擎

由於JS是直譯語言。要成功執行JS,必須將程式碼再轉譯成電腦「看得懂」的語言,V8 引擎就是Google 做出來讓 JS 跟瀏覽器溝通的解決方案。


參考來源:

  • [筆記] 理解 JavaScript 中的事件循環、堆疊、佇列和併發模式(Learn event loop, stack, queue, and concurrency mode of JavaScript in depth)
  • 一次了解 JS 中的 Event loop、Call Stack 與 Task Queue
  • JavaScript 深入淺出 Event Loop、Job Queue
  • JS 原力覺醒 Day02 – JavaScript V8 引擎

Total
0
Shares
0
0
0
0
0
Related Topics
  • alpha camp
  • call stack
  • event loop
  • task queue
Yi

Previous Article

要不要從 Evernote 轉移到 Notion?兩款筆記功能大比較

觀看文章
Next Article

用ORID回顧自己的進步|Alpha Camp 學期 2-2期末驗收

觀看文章
You May Also Like
觀看文章
  • 程式

用逐周ORID紀錄學習變化|Alpha Camp 學期 2-3 心得

  • Yi
  • 2020-12-23
觀看文章
  • 程式

認識 JavaScript 的物件導向|Alpha Camp 學期 2-2 心得

  • Yi
  • 2020-12-05
觀看文章
  • 懶人包
  • 程式

歷時九個月,我在學程式的路上|Alpha Camp 全學期心得

  • Yi
  • 2020-11-29
觀看文章
  • 程式

用ORID回顧自己的進步|Alpha Camp 學期 2-2期末驗收

  • Yi
  • 2020-11-25
觀看文章
  • 程式

認識API, HTTP, Ajax|Alpha Camp 學期 2-2心得

  • Yi
  • 2020-11-08
觀看文章
  • 程式

羅馬數字轉換 Integer to Roman|Alpha Camp 學期2-1期末驗收

  • Yi
  • 2020-10-29
觀看文章
  • 程式

打造一個會動的網頁|Alpha Camp 學期 2-1 心得

  • Yi
  • 2020-10-21
觀看文章
  • 程式

SQL入門課-SQL 資料分析入門 on Udemy

  • Yi
  • 2020-09-17

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

追蹤趣玩 Kyiplay,不漏掉親子旅遊資訊
追蹤趣玩
Facebook 0
Instagram 0

Recent Posts

  • 台南一日遊親子行程|樹谷科學館、樹谷農場、玏食早午餐、有時候杏仁豆腐冰
  • 完整防災避難指南|戰備物資、通訊、撤離準備清單
  • 戰爭來了怎麼辦?高風險地區的避難計畫與撤離SOP
  • 災害或戰爭期間:如何接收訊息並與親友通訊聯絡
  • 遇到封鎖怎麼辦?家庭必備戰備物資與儲糧建議
Featured Posts
  • 台南一日遊親子行程|樹谷科學館、樹谷農場、玏食早午餐、有時候杏仁豆腐冰 1
    台南一日遊親子行程|樹谷科學館、樹谷農場、玏食早午餐、有時候杏仁豆腐冰
  • 完整防災避難指南|戰備物資、通訊、撤離準備清單 2
    完整防災避難指南|戰備物資、通訊、撤離準備清單
  • 戰爭來了怎麼辦?高風險地區的避難計畫與撤離SOP 3
    戰爭來了怎麼辦?高風險地區的避難計畫與撤離SOP
  • 災害或戰爭期間:如何接收訊息並與親友通訊聯絡 4
    災害或戰爭期間:如何接收訊息並與親友通訊聯絡
  • 家庭必備戰備物資與儲糧建議 5
    遇到封鎖怎麼辦?家庭必備戰備物資與儲糧建議
Categories
  • 懶人包 (4)
  • 生活 (30)
  • 研究 (21)
  • 程式 (13)
  • 育兒好物 (8)
  • 育兒經驗 (6)
  • 行銷 (6)
  • 親子景點 (1)
  • 親子餐廳 (1)
  • 隨筆 (2)
趣玩 Kyiplay
  • 親子飯店
  • 親子景點
  • 親子餐廳
  • 育兒好物
  • 育兒經驗
  • 生活
人生,我的玩樂實驗室

Input your search keywords and press Enter.