單線程與同步執行

JS 是單線程並且同步執行的,老實說這兩個名詞曾經困擾我很久,希望現在能藉由自己的理解來解放與我當初有同樣困擾的同學。

大家應該就學時期都有寫過回家作業吧?尤其是接近期中期末考,天X的每個科目都有作業要做,國英數自社會瘋狂壓榨著每個小朋友的心理健康...

面對這些作業,我們可以有幾種處理方式 -

1. 擺爛

  1. 按部就班,國文作業寫完再寫英文,一門一門科目消化,個別擊破

  2. 轉換心情,國文寫一寫手酸了去算數學,數學算一算累了去背英文,每個科目都跳來跳去這邊消化一點,那邊消化一點,直到最後寫完作業

  3. 爸媽我不想努力,找媽媽或爸爸一起來寫作業,大家同心協力才能早點上床睡覺!

這幾個方法中:

[1.] 按部就班,一門一門科目消化,就是同步,把作業照著固定的順序做下去。

[2.] 轉換心情,這邊做一點那邊做一點,就是非同步,消化作業之間沒有一定的順序節奏。

[1. & 2.] 不管在這之間選擇哪種,你終究只能同時處理一項作業,這就是單執行緒

[3.] 不想努力,找爸媽一起寫,就能同時處理多項作業,這就是多執行緒

所以我們說 JS 是一門同步、單執行緒的語言,就是表示 JS 做事會有一個固定的順序(同步),而且他只有一個人,所以一次只能處理一件事(單執行緒)。

同步執行的過程中,若有異步操作(Promise),或使用了 JS Engine 之外的 API(runtime 提供),則 event loop 會介入執行流程,詳情請見 event loop 敬請期待^^。

Last Updated:
Contributors: jeremy