同步、異步、阻塞、非阻塞的區別(科普版)

關於同步,異步,阻塞、非阻塞的概念,看了好多遍,但時間一長又很容易忘記,這篇科普版算爲以後的自己降低學習成本吧。

 

同步(Synchronous)和異步(Asynchronous):

同步和異步通常用來形容一次方法調用。

同步,指調用者調用方法時,被調用方不立刻返回結果,而是等被調用方處理完事情後纔會給調用者返回結果。

異步,指調用者調用方法時,被調用方立即返回,等處理完結果再向調用者返回結果。

 

用生活場景舉個例子吧:我和朋友去奶茶店,我--方法調用者,奶茶賣家--被調用者,朋友--先打着醬油。

基於以上場景。若我是同步調用買奶茶的方法,那麼畫風是這樣的:我點一杯奶茶,然後奶茶賣家不理我,賣家等奶茶製作完畢才把奶茶給我。若我是異步調用買奶茶的方法呢,就是我點了奶茶後,奶茶賣家回覆我:“好的”,然後賣家根據他的檔期開始製作奶茶,至於奶茶能不能做出來給我就不一定了。同步強調的是得到結果才返回,異步強調的是調用方法立刻返回。

 

阻塞(Blocking)和非阻塞(Non-Blocking)

阻塞和非阻塞通常用來形容方法調用者或者被調用者的狀態。

阻塞:指調用者調用方法後,調用者必須等待方法返回結果,處理完畢後,才能繼續執行其他方法。

非阻塞:指調用者調用方法後,調用者可以執行其他任務,等調用方法返回結果再對該結果進行處理。

 

繼續拿奶茶舉例子吧:我和朋友去奶茶店,對於方法調用者--我來說,我現在有兩個方法可以調用,第一個是向奶茶賣家點一杯奶茶,第二個是和我的朋友聊天。對於第一個方法,我向奶茶賣家點一杯奶茶(調用者調用方法),然後店家開始根據我點的奶茶開始製作(被調用方法執行任務),最終做好一杯奶茶給我(被調用方法返回結果),我喝奶茶(調用方法返回結果後,調用者對返回結果做處理)。第二個方法,我向朋友發起技術的聊天請求,然後朋友和我聊天,最終得到的結果是我又學到新的技術知識。

基於以上場景。若我是阻塞的,那麼畫風是這樣的:我點了一杯奶茶,然後苦等奶茶賣家做好奶茶給我,等奶茶這期間我不會做其他任何事情,只有賣家做好奶茶給我,我喝完奶茶,纔會和朋友聊天。若我是非阻塞的呢,想必你也猜到了,就是我點了奶茶後,和朋友談笑風生,等賣家做好奶茶的時候通知我,我再喝奶茶就行了。

 

當理解了上面的場景,再把線程,進程,IO等詞彙替代上文的調用者和被調用者,就好理解的多了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章