天天看點

同步、異步、阻塞、非阻塞

一、概念

1、同步:A調用B,B處理直到獲得結果,才傳回給A。需要調用者一直等待和确認調用結果是否傳回,然後繼續往下執行。

2、異步:A調用B,無需等待結果,B通過狀态通知A或回調函數來處理。調用結果傳回時,會以消息或回調的方式通知調用者。

3、阻塞:A調用B,A被挂起直到B傳回結果給A,才能繼續執行。調用結果傳回前,目前線程挂起不能夠處理其他任務,一直等待調用結果傳回。

4、非阻塞:A調用B,A不會被挂起,A可以執行其他操作。調用結果傳回前,目前線程不挂起,可以處理其他任務。

二、差別

  同步與異步更關注互動雙方是否可以同時工作。以同步的方式完成任務意味着多個任務的完成次序是串行的,假設任務 A 依賴于任務 B,那麼任務 A 必須等到任務 B 完成之後才能繼續,執行流程為 A->B;

  以異步的方式完成任務意味着多個任務的完成可以是并行的,這種情況多适用于任務之間沒有因果關系,假如任務 A 中需要執行任務 B,而任務 A 的完成不依賴于任務 B 的結果,那麼任務 A 調用任務 B 後可以繼續執行後續步驟而不需要等待任務 B 完成,也不關心任務 B 是否執行完畢,此時任務 A 和任務 B 是并行的

  同步和異步是個操作方式,阻塞和非阻塞是線程的一種狀态。

  同步、異步指的是被調用者結果傳回時通知線程的一種機制,

  阻塞、非阻塞指的是調用結果傳回程序前的狀态,是挂起還是繼續處理其他任務。