IO操作其實可以分成兩個步驟座哩,請求IO操作和執(zhí)行IO操作徒扶。一般的IO調(diào)用過程是這樣的:發(fā)起IO操作的請求,執(zhí)行IO操作根穷,得到IO操作的結(jié)果姜骡,將結(jié)果返回給IO操作請求。
同步和異步同步和異步是一種通信機制屿良,涉及到調(diào)用方和被調(diào)用方圈澈,關(guān)注的是IO操作的執(zhí)行過程及結(jié)果的返回方式,不同點在于雙方在這兩個方面的行為方式尘惧。如果調(diào)用方需要保持等待直到IO操作完成進而通過返回獲得結(jié)果康栈,則是同步的;如果調(diào)用方在IO操作的執(zhí)行過程中不需要保持等待,而是在操作完成后被動的接受(通過消息或回調(diào))被調(diào)用方推送的結(jié)果啥么,則是異步的登舞。同步和異步,適合描述執(zhí)行IO操作的情境悬荣。
阻塞和非阻塞阻塞和非阻塞是一種調(diào)用機制菠秒,只涉及到調(diào)用方,關(guān)注的是IO操作的執(zhí)行狀態(tài)氯迂,不同點在于請求IO操作后践叠,針對IO操作的狀態(tài),調(diào)用方的行為方式囚戚。如果調(diào)用方等待IO操作完成后返回酵熙,則是阻塞的;如果調(diào)用方不需要等待IO操作完成就立即返回驰坊,則是非阻塞的匾二,非阻塞的情況下,常常需要多次調(diào)用去check拳芙,才能獲得IO操作的結(jié)果察藐。阻塞和非阻塞,適合描述發(fā)起IO操作請求的情境舟扎。
阻塞與非阻塞分飞,和同步異步無關(guān),可以阻塞等待同步執(zhí)行過程完成睹限,也可以阻塞等待異步執(zhí)行過程完成譬猫。根據(jù)以上理解,同步和異步羡疗,阻塞和非阻塞染服,是可以互相組合的。
同步阻塞調(diào)用者發(fā)起IO操作請求叨恨,等待IO操作完成再返回柳刮。IO操作的過程需要等待,操作執(zhí)行完成后返回結(jié)果痒钝。
同步非阻塞調(diào)用者發(fā)起IO操作請求秉颗,詢問IO操作的狀態(tài),如果未完成送矩,則立即返回蚕甥;如果完成,則返回結(jié)果栋荸。IO操作的過程需要等待執(zhí)行完成才返回結(jié)果菇怀。
異步阻塞調(diào)用者發(fā)起IO操作請求夷家,等待IO操作完成再返回。IO操作的過程不需要等待敏释,操作完成后通過通知或回調(diào)獲得結(jié)果。
異步非阻塞調(diào)用者發(fā)起IO操作請求摸袁,詢問IO操作的狀態(tài)钥顽,如果未完成,則立即返回靠汁;如果完成蜂大,則返回結(jié)果。IO操作的過程不需要等待蝶怔,操作完成后通過通知或回調(diào)獲得結(jié)果奶浦。