同步和異步、阻塞和非阻塞的區別

同步和異步,阻塞和非阻塞,這兩組概念出如今IO操做中經常讓人混淆不清。這裏根據本身看到的,想到的,整理下本身的理解,權當交流。異步

IO操做其實能夠分紅兩個步驟,請求IO操做和執行IO操做。
通常的IO調用過程是這樣的:發起IO操做的請求,執行IO操做,獲得IO操做的結果,將結果返回給IO操做請求。同步

同步和異步
同步和異步是一種通訊機制,涉及到調用方和被調用方,關注的是IO操做的執行過程及結果的返回方式,不一樣點在於雙方在這兩個方面的行爲方式。
若是調用方須要保持等待直到IO操做完成進而經過返回得到結果,則是同步的;若是調用方在IO操做的執行過程當中不須要保持等待,而是在操做完成後被動的接受(經過消息或回調)被調用方推送的結果,則是異步的。
同步和異步,適合描述執行IO操做的情境。請求

阻塞和非阻塞
阻塞和非阻塞是一種調用機制,只涉及到調用方,關注的是IO操做的執行狀態,不一樣點在於請求IO操做後,針對IO操做的狀態,調用方的行爲方式。
若是調用方等待IO操做完成後返回,則是阻塞的;若是調用方不須要等待IO操做完成就當即返回,則是非阻塞的,非阻塞的狀況下,經常須要屢次調用去check,才能得到IO操做的結果。
阻塞和非阻塞,適合描述發起IO操做請求的情境。通信

阻塞與非阻塞,和同步異步無關,能夠阻塞等待同步執行過程完成,也能夠阻塞等待異步執行過程完成。
根據以上理解,同步和異步,阻塞和非阻塞,是能夠互相組合的。推送

同步阻塞
調用者發起IO操做請求,等待IO操做完成再返回。IO操做的過程須要等待,操做執行完成後返回結果。阻塞

同步非阻塞
調用者發起IO操做請求,詢問IO操做的狀態,若是未完成,則當即返回;若是完成,則返回結果。IO操做的過程須要等待執行完成才返回結果。回調

異步阻塞
調用者發起IO操做請求,等待IO操做完成再返回。IO操做的過程不須要等待,操做完成後經過通知或回調得到結果。非阻塞

異步非阻塞
調用者發起IO操做請求,詢問IO操做的狀態,若是未完成,則當即返回;若是完成,則返回結果。IO操做的過程不須要等待,操做完成後經過通知或回調得到結果。消息

相關文章
相關標籤/搜索