#0 同步異步态坦、阻塞非阻塞
- 同步異步是從消息通知機(jī)制角度來說的
- 阻塞與非阻塞是從程序(線程)等待消息通知時(shí)的狀態(tài)角度來說的
#0.1 阻塞和非阻塞
阻塞和非阻塞關(guān)注的是程序在等待調(diào)用結(jié)果(消息噪猾,返回值)時(shí)的狀態(tài).
- 阻塞調(diào)用是指調(diào)用結(jié)果返回之前康嘉,當(dāng)前線程會被掛起诫给。調(diào)用線程只有在得到結(jié)果之后才會返回。
- 非阻塞調(diào)用指在不能立刻得到結(jié)果之前辽社,該調(diào)用不會阻塞當(dāng)前線程楷扬。
#0.2 同步與異步
同步和異步關(guān)注的是消息通信機(jī)制 (synchronous communication/ asynchronous communication)
- 同步,就是在發(fā)出一個(gè)調(diào)用時(shí)廷粒,在沒有得到結(jié)果之前窘拯,該調(diào)用就不返回。但是一旦調(diào)用返回坝茎,就得到返回值了涤姊。換句話說,就是由調(diào)用者主動等待這個(gè)調(diào)用的結(jié)果嗤放。
注意:同步調(diào)用返回的結(jié)果有可能是返回錯(cuò)誤碼(例如數(shù)據(jù)還未準(zhǔn)備好)思喊,此時(shí)可能就需要調(diào)用者輪詢檢測數(shù)據(jù)是否準(zhǔn)備好,于是次酌,輪詢的間隙中調(diào)用者可以忙里偷閑干點(diǎn)別的事恨课。這就是網(wǎng)上各種舉例說明的同步非阻塞形式。
- 異步則是相反和措,調(diào)用在發(fā)出之后庄呈,這個(gè)調(diào)用就直接返回了蜕煌,所以沒有返回結(jié)果派阱。換句話說,當(dāng)一個(gè)異步過程調(diào)用發(fā)出后斜纪,調(diào)用者不會立刻得到結(jié)果贫母。而是在調(diào)用發(fā)出后文兑,被調(diào)用者通過狀態(tài)、通知來通知調(diào)用者腺劣,或通過回調(diào)函數(shù)處理這個(gè)調(diào)用绿贞。
有時(shí)候API只提供的異步調(diào)用方式,但業(yè)務(wù)邏輯就是需要API調(diào)用完成之后再做其他事橘原,這時(shí)候就相當(dāng)于業(yè)務(wù)邏輯需要調(diào)用者以異步阻塞方式工作了
另外一種使用阻塞方式的理由是降低響應(yīng)延遲
#1
TBC