天天看點

阻塞非阻塞與同步異步的差別

有如下場景:

1.調用方在調用一個方法後,在沒有得到結果時,就不會傳回,一直等待,而不去做其他的事,直到被調用方傳回消息。(同步阻塞)

2.調用方在調用一個方法後,在沒有得到結果時,就不會傳回;然後先去做其他事情,但需要隔一段時間看看之前的調用有沒有傳回消息(同步非阻塞)

3.調用方在調用一個方法後,不需要等待被調用方消息,立刻傳回,去做其他的事情,等被調用方通過"通知或回調"通知後,再來擷取消息。(異步非阻塞)

4.調用方在調用一個方法後,不需要等待被調用方消息,立刻傳回,但不去做其他事,就等着被調用方通過"通知或回調"通知。(異步阻塞)

基于以上4種場景:梳理以下差別    

同步與異步

  • 同步和異步關注的是消息通信機制 (synchronous communication/ asynchronous communication)
  • 被調用方是否可以通過"通知或回調"來通知調用方擷取傳回消息:可以就是異步,不可以就是同步

阻塞與非阻塞

  • 阻塞和非阻塞關注的是程式在等待調用結果(消息,傳回值)時的狀态。就是在調用方法後,在沒有傳回消息的情況下,有沒有去做其他事
  • 不去做其他事,一直等待,就是阻塞
  • 調用後,沒有等待去做其他事,但是會監聽調用是否傳回消息,是非阻塞