同步,異步,阻塞,非阻塞

30 9月, 2014

同步,異步,阻塞,非阻塞




同步(synchronous) 
異步(asynchronous) 
阻塞(blocking) 
非阻塞(non-blocking)

最近再閱讀某篇文章時,無意間又再一次看到這些既陌生又熟悉的字眼。

之前就想好好釐清這幾個字代表的意思。

於是就花點時間,去估狗了許多的文章。

吸收消化後。用比較誤導淺白的說法來記錄。





※※※※※※※※※※※※※※※※※※※※※※※※※

(一)了解進程與階段


網路上很多文章都大約將一個進程分為二個階段:請求執行
("進程",以白話來講就是"一件事情")


但是就我個人認為

在一個進程,主要會分為三個階段:請求 → 執行 → 結果





※※※※※※※※※※※※※※※※※※※※※※※※※

(二)同步與異步



同步就是"同時間只能做一件事情"

異步就是"同時間可以做很多件事情"

同步與異步簡單來說就是"同時間"能處理事情的多寡



以下舉例子說明:

小明明天要考數學期末考。小明的媽媽要求小明把1~3章模擬考的試題寫完,
同時間對小明發出了"三個進程"。

(1)數學第一章試題
(2)數學第二章試題
(3)數學第三章試題



【同步】
理解為"同"一個人處理這批事情

同步的情況下,小明只有一個人,只能慢慢作答,第一章考卷寫完才能寫第二章...



【異步】
理解為"不同(異)"的人處理這批事情

異步的情況下,使用了影分身術(多線程)來幫忙寫考卷。



由此可知
同樣的時間,異步,可以由額外的線程來分攤後續的工作

而同步由於只有一個人來做,就會先著手目前的工作。

※※※※※※※※※※※※※※※※※※※※※※※※※


(三)阻塞與非阻塞

阻塞就是"同件事情還沒做完,會等做完做才會回報結果。"

非阻塞就是"同件事情還沒做完,也可以先回報結果。"


阻塞與非阻塞簡單概略來說就是"同件事情"在執行中是否有等待


以下舉例子說明:


假設小明做數學第一章試題的時候。執行需要花費10秒鐘才能完成。




【阻塞】
媽媽發出了請求後,媽媽會處於"一直等待"小明的回覆的狀態,而小明會等到執行完畢(花了10秒)才回覆結果。





【非阻塞】
媽媽發出了請求後,小明會立刻回覆目前的資料狀態,但是實際上試題還沒做完,但是媽媽不用花時間等待小明回覆

 
也就是小明在接受請求的時候,會依據"目前寫試題"的狀態來回報。

媽媽可以一直詢問小明"寫好了沒"。
小明雖然還沒完成,但是還是會"立刻"回覆。
(以程式方面來說,可能未完成得到的資
料都為Null或者是error,直到真正完成才能獲取到資料)

而小明真正完成後,會將寫完的結果,先"暫存"

等待媽媽下一次在問的時候,會直接將資料結果給媽媽。



這個好處就是媽媽請求後,小明會立刻回覆媽媽,媽媽知道後可以先做別的事情,不用等小明做完才回覆。



張貼留言