同步VS異步異步
同步和異步關注的是消息通訊機制(Synchronous / Asynchronous Communication)分佈式
同步:發出一個"調用"時,在沒有獲得結果返回前,該"調用"就不返回。一旦調用返回,就獲得返回值了。ide
異步:"調用"發出後,這個調用直接返回了,因此沒有返回結果,即不會當即獲得返回結果。而是在"調用"發出後,被調用者經過狀態、通知來通知調用者,或經過回調函數處理這個調用。函數
抄個例子:spa
你打電話問書店老闆有沒有《分佈式系統》這本書,若是是同步通訊機制,書店老闆會說,你稍等,」我查一下",而後開始查啊查,等查好了(多是5秒,也多是一天)告訴你結果(返回結果)。而異步通訊機制,書店老闆直接告訴你我查一下啊,查好了打電話給你,而後直接掛電話了(不返回結果)。而後查好了,他會主動打電話給你。在這裏老闆經過「回電」這種方式來回調。線程
阻塞VS非阻塞orm
阻塞和非阻塞關注的是 程序在等待調用結果(消息,返回值)時的自身狀態。進程
阻塞:是指在調用結果返回前,當前線程被掛起。調用線程只有在獲得結果以後纔會返回。回調函數
非阻塞:即使不能馬上獲得結果以前,該調用不會阻塞當前進程。同步
抄個例子:
你打電話問書店老闆有沒有《分佈式系統》這本書,你若是是阻塞式調用,你會一直把本身「掛起」,直到獲得這本書有沒有的結果,若是是非阻塞式調用,你無論老闆有沒有告訴你,你本身先一邊去玩了, 固然你也要偶爾過幾分鐘check一下老闆有沒有返回結果。 在這裏阻塞與非阻塞與是否同步異步無關。跟老闆經過什麼方式回答你結果無關。