觀念詳解『阻塞、非阻塞、同步及異步』

閱讀時間約 4 分鐘

預備知識


一切從任務(行程或執行緒)狀態變化說起

計算機由單個程式到多個程式運行及整批系統到分時系統,這一切都是為了更有效率地使用計算機,現在我們討論在單核情況下的計算機是如何運作的,每個任務的運行都被分配一個時間片段,時間到就會發起系統中斷告知系統,讓CPU可以去執行其他任務,由於每個時間片段都時間都非常短,所以我們會覺得好像所有的任務都是同時運作的,但其實不然,這些任務是一個接著一個按照順序被執行的,我們把這個現象稱之為並行(中國用語:並發)。如果說在時間片段期間我們發起會阻塞當前任務的系統調用,那麼當前任務所有相關資訊都會被保存,然後被放入等待佇列當中,該任務狀態為阻塞,排班程式會為我們分派其他任務並且配置CPU給其使用,而這個被作業系統阻塞的任務其發起的系統調用會經由DMA來進行處理資料的交換,等待完成搬移資料會發出I/O中斷告知作業系統,此時作業系統將會從該任務暫停的地方開始繼續執行。
以下是任務狀態流程圖:
任務狀態

並行與平行

並行(Concurrency),中國用語並發
任務在不同時間點被分配CPU來執行處理,也就是說在同一個時間點,任務不可能同時執行的。
平行(Parallelism),中國用語並行
每一個任務都可以分別被分配至不同的CPU來執行處理,也就是說在同一個時間點下,被分配CPU的任務可以同時執行。平行是基於多核處理器才能實現的
用一張圖說明並行與平行:
並行與平行

I/O與CPU傾向任務

I/O傾向任務(I/O-bound )
CPU執行時間短,I/O執行時間長。(優先權重較CPU傾向任務高)
CPU傾向任務(CPU-bound )
CPU執行時間長,I/O執行時間短。

阻塞、非阻塞


調用阻塞I/O

作業系統層面
任務調用阻塞I/O後,系統不會返回結果,會將當前任務相關資訊保存,並且將CPU使用權歸還,讓CPU執行其他任務,而該任務進入等待佇列,此時狀態為阻塞態,並且等待處理I/O的控制器處理完資料發出中斷告知系統,系統才會返回結果。
程式層面
因為此刻任務為阻塞態,所以什麼事都不做,就只有等待,接收到系統返回的結果後,此任務才能繼續往下執行。
調用阻塞I/O

調用非阻塞I/O

作業系統層面
任務調用非阻塞I/O後,系統會立即返回一結果或一個錯誤,不會將當前任務阻塞,此任務仍然被CPU執行著,佔用著CPU,CPU會一直處理狀態判斷,接收來自應用層面不斷輪詢的非阻塞調用。
程式層面
此任務透過不斷輪詢的方式,向系統檢查是否有結果,而系統會不斷返回結果給該任務。
調用非阻塞I/O

阻塞與非阻塞的差異

  • 阻塞I/O不能進行並行操作的,很重要在這裡我指的是該任務本身的程式,而不是利用作業系統的多行程/多執行緒來實現並行操作,對於非阻塞I/O來講,可以實現程式本身的並行操作,這就是為什麼非阻塞I/O執行效率比較高的一個原因。
  • 非阻塞I/O調用後會立即返回結果或一個錯誤,而阻塞I/O調用後則不會立即返回
  • 調用非阻塞I/O的任務,仍然佔據著CPU,所以不會被阻塞,而調用阻塞I/O的任務會釋出CPU的使用權,進入阻塞狀態

同步、異步


什麼是同步?

以例子來說,現在在腳本中有兩個函數A與B,其中在A中我們調用B函數,A函數必須等到B函數執行完,返回結果後,A函數才能繼續執行,這個期間A函數必須等待。同步有個特色那就是等待,也就是說他是順序執行一個接著一個。
同步執行結果

什麼是異步

當一個異步方法調用發出後,會立即返回一個錯誤或結果,讓其回到應用本身可以繼續往下執行,如果說該應用不只發出一個異步調用,彼此之間不需要等待誰先完成才能執行下一個,它們是平行操作的,執行結果誰先返回不一定,這就是異步的特色。
以下我們來看一下這段程式碼的執行結果:
異步執行結果
可以發現上圖的異步執行結果,我們對其發出了兩個異步調用,可以看到它們的返回順序不一致,這就是異步的特色,讓其可以平行處理,不需要彼此等待。

參考來源

  1. 《深入淺出node.js》。朴靈。北京。人民郵電出版社。
  2. 【操作系统】詳解阻塞、非阻塞、同步、異步
  3. 行程管理『行程與執行緒概念
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
6會員
5Content count
留言0
查看全部
發表第一個留言支持創作者!
yuanchin的沙龍 的其他內容
為什麼要對任務進行排班呢?這篇文章將會告訴你,在作業系統當中,是如何利用排班演算法來處理交互式與非交互式任務,以及如何提升CPU使用率!
行程(進程、process)、執行緒(線程、thread)、上下文切換(context switch)、行程控制塊(PCB)、行程排班(process scheduler)、行程狀態、執行緒模式
Development environment of Laravel. Nginx, php, mysql and centos 7
為什麼要對任務進行排班呢?這篇文章將會告訴你,在作業系統當中,是如何利用排班演算法來處理交互式與非交互式任務,以及如何提升CPU使用率!
行程(進程、process)、執行緒(線程、thread)、上下文切換(context switch)、行程控制塊(PCB)、行程排班(process scheduler)、行程狀態、執行緒模式
Development environment of Laravel. Nginx, php, mysql and centos 7
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
這期我會特別談談黃金分割線、又稱斐波那契回撤的實務應用,該如何有效的利用這個工具賺錢呢?
Thumbnail
上篇介紹基礎名詞,這次要分享拍攝技巧概念,實際上操作相機和手機差異真的很大,手機相對來說更為直覺操作,即時能看到影像成果並快速後製,而相機具備的優秀性能、raw檔、相簿分類方式、專業感...,也是許多攝影愛好者一直戀戀不倦的因素,而且不同相機不同攝影器材,拍攝出風景都能呈現不同質感,真的讓人很容易陷
Thumbnail
從一個懵懂無知的大學生,到踏入專業投資領域,五年多時間裡不斷學習成長。當中很幸運遇見啟蒙導師,一直在投資和職涯的道路上給我支持與鼓勵,這些話是他不斷分享給我,在投資路上一輩子終身受益無窮。因此,我這邊特地分享給大家,並融入我自己的個人想法,給予讀者學習參考!
Thumbnail
一個標題超長的續集,說的是上一本斷食善終之後,更詳細的個案介紹、部分國家的狀況以及相關概念的澄清。這本書少了上一本書主要談母親斷食往生經歷的親屬情緒,多的是醫師專業、更細緻的步驟以及部分家屬的經驗集結。奶奶也到了高齡,身體各個器官開始退化,即便自己對這樣的死亡歷程並不反對排斥,但死亡這個禁忌話題,確
Thumbnail
「那是一位13歲的國中女生,來就診的時候身高只有134公分,體重27公斤,非常瘦小,第二性徵也沒有發育 。」兒童內分泌科主任林昭旭醫師分享,「進一步檢查發現她是生長激素缺乏症,骨齡是10歲6個月,且性荷爾蒙也沒有分泌 。」經過半年的追蹤,她依然沒有長高
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
這期我會特別談談黃金分割線、又稱斐波那契回撤的實務應用,該如何有效的利用這個工具賺錢呢?
Thumbnail
上篇介紹基礎名詞,這次要分享拍攝技巧概念,實際上操作相機和手機差異真的很大,手機相對來說更為直覺操作,即時能看到影像成果並快速後製,而相機具備的優秀性能、raw檔、相簿分類方式、專業感...,也是許多攝影愛好者一直戀戀不倦的因素,而且不同相機不同攝影器材,拍攝出風景都能呈現不同質感,真的讓人很容易陷
Thumbnail
從一個懵懂無知的大學生,到踏入專業投資領域,五年多時間裡不斷學習成長。當中很幸運遇見啟蒙導師,一直在投資和職涯的道路上給我支持與鼓勵,這些話是他不斷分享給我,在投資路上一輩子終身受益無窮。因此,我這邊特地分享給大家,並融入我自己的個人想法,給予讀者學習參考!
Thumbnail
一個標題超長的續集,說的是上一本斷食善終之後,更詳細的個案介紹、部分國家的狀況以及相關概念的澄清。這本書少了上一本書主要談母親斷食往生經歷的親屬情緒,多的是醫師專業、更細緻的步驟以及部分家屬的經驗集結。奶奶也到了高齡,身體各個器官開始退化,即便自己對這樣的死亡歷程並不反對排斥,但死亡這個禁忌話題,確
Thumbnail
「那是一位13歲的國中女生,來就診的時候身高只有134公分,體重27公斤,非常瘦小,第二性徵也沒有發育 。」兒童內分泌科主任林昭旭醫師分享,「進一步檢查發現她是生長激素缺乏症,骨齡是10歲6個月,且性荷爾蒙也沒有分泌 。」經過半年的追蹤,她依然沒有長高