簡單理解:同步、異步、阻塞、非阻塞

同步、異步,是 一種協做機制
  • 同步:發出一次請求後必須等到該請求有返回結果,才能繼續下一步工做;請求者需主動詢問是否有返回結果;
  • 異步:發出一次請求後無需等到該請求有返回結果,便可進行下一步工做;請求有結果後,會以某種方式通知請求者;
阻塞、非阻塞,是 等待某種資源(返回結果)時線程的狀態
  • 阻塞:發出一次請求後,在未獲得返回結果前,線程掛起,這期間線程沒法作其餘事情;
  • 非阻塞:發出一次請求後,在未獲得返回結果前,線程不會掛起,這期間線程能夠作其餘事情;

舉例子:
老王、小李:請求處理者;
機器人A、B:請求發出者;( 這裏,你能夠把A、B的執行看做一個總體的工做流
 
通用場景:
A、B收到主人的命令,須要去老王的書店買書,以及去小李的店鋪買水果;
A、B到了老王的書店,讓老王幫忙找「XXX」這本書,隨後老王進了藏書庫去找書;
 
同步阻塞:
在老王找書期間,A、B中止運行( 至關於阻塞,線程掛起),直到老王找到書後,A、B才恢復運行,而後執行下一項任務:去小李的店鋪買水果( 同步,買書->有結果->下一項任務
 
同步非阻塞:
在老王找書期間,A、B沒有中止運行( 非阻塞,線程沒有掛起),它們逛了逛書店,掃描了下這些書的內容,而後時不時問問老王書找到了沒有( 主動輪詢請求結果);等到老王找到書後,A、B才能拿着書離開去執行下一項任務( 同步,買書->有結果->下一項任務)。( 須要注意的是:雖然 A、B在老王找書的期間能夠運行,可是它們必須得拿到書後,才能去買水果,不能跳過獲取書的這個環節
 
異步阻塞:
在老王找書期間,A中止運行( 阻塞,線程掛起),可是B能夠不用等待,直接去執行下一項任務:去小李的店鋪買水果( 異步,買書->暫無結果->下一項任務);等老王找到書後,能夠讓A拿着書去找B,或者打電話讓B過來書店拿書( 即:以某種方式將結果傳遞給請求發出者
 
異步非阻塞:
在老王找書期間,A、B沒有中止運行( 非阻塞,線程沒有掛起),A、B繼續去執行下一項任務:去小李的店鋪買水果( 異步,買書->暫無結果->下一項任務);等老王找到書後,能夠打電話給A、B讓他們來取書,或者經過快遞把書寄給A、B( 即:以某種方式將結果傳遞給請求發出者
 
have a good time! :D
相關文章
相關標籤/搜索