同步和異步是對相,阻塞與非阻塞也是相對的魄藕,這個好理解裸燎,但這兩組術(shù)語之間怎么區(qū)分,或者有什么聯(lián)系泼疑,從字面上確實(shí)有點(diǎn)繞德绿,但從場景和使用出發(fā)還是很好理解的,雖是不同層次上的描述退渗,但還是有一定制約的移稳。這里的同步和阻塞并非指java中的鎖相關(guān)概念。
使用場景
- 阻塞和非阻塞的術(shù)語一般用在IO操作上会油,線程操作也有用到
- 同步和異步的術(shù)語一般用在業(yè)務(wù)接口調(diào)用上或者業(yè)務(wù)描述上
狹義的理解:
- 阻塞和非阻塞就是指IO的工作模式个粱,阻塞需獨(dú)占線程
- 同步和異步指的接口提供的調(diào)用方式,同步需獨(dú)占線程
廣義的理解
- 阻塞和非阻塞是針對服務(wù)提供者來說的翻翩,或者說是針對實(shí)現(xiàn)來說的
- 同步和異步是對針對服務(wù)消費(fèi)者來說的都许,或者說是針對上層調(diào)用來說的
- 業(yè)務(wù)接口提供方稻薇,提供的是阻塞的調(diào)用方式,那么調(diào)用方?jīng)]有選擇胶征,只能是同步調(diào)用塞椎。
- 業(yè)務(wù)接口提供方,提供的是非阻塞的調(diào)用方式睛低,那么該業(yè)務(wù)自然才用異步的調(diào)用方式案狠。
本質(zhì)
- 從計算機(jī)本身出發(fā),其本質(zhì)就是CPU為該事情分配的執(zhí)行機(jī)會有沒有被浪費(fèi)掉钱雷,浪費(fèi)掉了就是阻塞和同步骂铁,否則就是非阻塞和異步。
- CPU的執(zhí)行機(jī)會指的線程調(diào)度的機(jī)會罩抗。由于該事情還沒準(zhǔn)備好拉庵,該線程被分配了執(zhí)行時間,它也沒辦法執(zhí)行套蒂。這就是阻塞和同步的钞支,如果阻塞和異步的,那么該線程可以去做別的事泣懊。
場景經(jīng)常有如下
- 調(diào)用業(yè)務(wù)接口執(zhí)行某項業(yè)務(wù)時,直接返回業(yè)務(wù)結(jié)果麻惶。那么它是(業(yè)務(wù))同步的(調(diào)用)阻塞的馍刮。
- 調(diào)用業(yè)務(wù)接口時,只返回調(diào)用是否成功窃蹋,但沒返回業(yè)務(wù)結(jié)果卡啰,需要另外一種方式,比如回調(diào)或者按頻率嘗試獲取結(jié)果等警没。那么它是(業(yè)務(wù))異步(調(diào)用)非阻塞的匈辱。
- IO操作時,阻塞和非阻塞術(shù)語會經(jīng)常用到杀迹,比如阻塞模式和非阻塞模式
- 同步調(diào)用業(yè)務(wù)接口時亡脸,有可能是由于該接口在進(jìn)行阻塞的IO操作引起起的,也有可能树酪,也有可能是別的原因浅碾,比如在等別一個線程的執(zhí)行結(jié)果。
- 異步調(diào)用業(yè)務(wù)口時续语,也有可能該接口使用了另一個線程在進(jìn)行阻塞的IO操作垂谢,待有結(jié)果后再回調(diào)上層進(jìn)行通知。
生活場景
- 某個人A(相當(dāng)于一個線程)去中國銀行辦理業(yè)務(wù)疮茄,如果銀行要求必須在窗口前排隊挨個進(jìn)行服務(wù)辦理滥朱,那么銀行提供的就是阻塞似的服務(wù)根暑,這個人就必須這么耗著,不能離開去辦別的事徙邻,那么A只能采用同步方式辦理這個業(yè)務(wù)排嫌。
- 下次A又需要去中國銀行辦理同樣的業(yè)務(wù)了,這次他學(xué)乖了鹃栽,自己不去躏率,而是讓B去,那么A采用了異步的方式來辦理該業(yè)務(wù)了民鼓。這回B傻眼了薇芝。
- 又有一次A要去招商銀行辦理業(yè)務(wù),這次B也長教訓(xùn)了丰嘉,不愿意去夯到,只好騙C去了,招商銀行不要求窗前排隊饮亏,只要求在門口拿個號就行了耍贾,到時叫號辦理,C發(fā)現(xiàn)前面還有好多人路幸,如是去外面泡腳去了荐开,回去找A報銷,說排隊排到腳痛简肴,不泡腳不行呀晃听。這回銀行提供的是非阻塞的服務(wù),A和C都是民步辦理了業(yè)務(wù)砰识。