同步,異步,阻塞,非阻塞
同步(synchronous)
異步(asynchronous)
阻塞(blocking)
非阻塞(non-blocking)
最近再閱讀某篇文章時,無意間又再一次看到這些既陌生又熟悉的字眼。
之前就想好好釐清這幾個字代表的意思。
於是就花點時間,去估狗了許多的文章。
吸收消化後。用比較
※※※※※※※※※※※※※※※※※※※※※※※※※
(一)了解進程與階段
網路上很多文章都大約將一個進程分為二個階段:請求與執行
("進程",以白話來講就是"一件事情")
但是就我個人認為
在一個進程,主要會分為三個階段:請求 → 執行 → 結果
※※※※※※※※※※※※※※※※※※※※※※※※※
(二)同步與異步
同步就是"同時間只能做一件事情"
異步就是"同時間可以做很多件事情"
同步與異步簡單來說就是"同時間"能處理事情的多寡
以下舉例子說明:
小明明天要考數學期末考。小明的媽媽要求小明把1~3章模擬考的試題寫完,
同時間對小明發出了"三個進程"。(1)數學第一章試題
(2)數學第二章試題
(3)數學第三章試題
【同步】
理解為"同"一個人處理這批事情
同步的情況下,小明只有一個人,只能慢慢作答,第一章考卷寫完才能寫第二章...
【異步】
理解為"不同(異)"的人處理這批事情
異步的情況下,使用了影分身術(多線程)來幫忙寫考卷。
由此可知
同樣的時間,異步,可以由額外的線程來分攤後續的工作
而同步由於只有一個人來做,就會先著手目前的工作。
※※※※※※※※※※※※※※※※※※※※※※※※※
(三)阻塞與非阻塞
阻塞就是"同件事情還沒做完,會等做完做才會回報結果。"
非阻塞就是"同件事情還沒做完,也可以先回報結果。"
阻塞與非阻塞簡單概略來說就是"同件事情"在執行中是否有等待
以下舉例子說明:
假設小明做數學第一章試題的時候。執行需要花費10秒鐘才能完成。
【阻塞】
媽媽發出了請求後,媽媽會處於"一直等待"小明的回覆的狀態,而小明會等到執行完畢(花了10秒)才回覆結果。
【非阻塞】
媽媽發出了請求後,小明會立刻回覆目前的資料狀態,但是實際上試題還沒做完,但是媽媽不用花時間等待小明回覆。
也就是小明在接受請求的時候,會依據"目前寫試題"的狀態來回報。
媽媽可以一直詢問小明"寫好了沒"。
小明雖然還沒完成,但是還是會"立刻"回覆。
(以程式方面來說,可能未完成得到的資
料都為Null或者是error,直到真正完成才能獲取到資料)
而小明真正完成後,會將寫完的結果,先"暫存"
等待媽媽下一次在問的時候,會直接將資料結果給媽媽。
這個好處就是媽媽請求後,小明會立刻回覆媽媽,媽媽知道後可以先做別的事情,不用等小明做完才回覆。
張貼留言