同步與異步
首先來解釋同步和異步的概念,這兩個(gè)概念與消息的通知機(jī)制
有關(guān)霞玄。也就是同步與異步主要是從消息通知機(jī)制角度來說的骤铃。
同步就是一個(gè)任務(wù)的完成需要依賴另外一個(gè)任務(wù)時(shí),只有等待另外一個(gè)任務(wù)的完成后坷剧,這個(gè)任務(wù)才能算完成惰爬,這是一種可靠的任務(wù)序列。要么成功都成功惫企,失敗都失敗撕瞧,兩個(gè)任務(wù)的狀態(tài)可以保持一致陵叽。
異步是不需要等待被另外一個(gè)任務(wù)的完成,只是通知另外一個(gè)任務(wù)要完成什么工作丛版,然后自己這個(gè)任務(wù)接著往下執(zhí)行巩掺,只要自己完成了我的任務(wù)就算完成了。至于另外一個(gè)任務(wù)最終是否真正完成页畦,我這個(gè)任務(wù)無法確定胖替,所以它是不可靠的任務(wù)序列。
消息通知
同步調(diào)用另外一個(gè)任務(wù)后豫缨,要一直等待返回消息(結(jié)果)通知后独令,才能進(jìn)行后續(xù)的執(zhí)行;
異步調(diào)用發(fā)出后好芭,調(diào)用者不能立刻得到返回消息(結(jié)果)燃箭,要通過狀態(tài)、通知和回調(diào)來通知調(diào)用者
這里提到執(zhí)行部件和調(diào)用者通過三種途徑返回結(jié)果
狀態(tài)舍败、通知和回調(diào)招狸。
使用哪一種通知機(jī)制,依賴于執(zhí)行部件的實(shí)現(xiàn)
場景比喻
去銀行辦理業(yè)務(wù)
1.選擇排隊(duì)等候瓤湘。
2.取一個(gè)小紙條上面有我的號(hào)碼瓢颅,等到排到我這號(hào)碼時(shí)恩尾,由柜臺(tái)的人通知我輪到我去辦理業(yè)務(wù)了弛说。
- 排隊(duì)等候:就是同步等待消息通知
- 等待別人通知:就是異步等待消息通知
阻塞與非阻塞
阻塞和非阻塞這兩個(gè)概念與程序(線程)
等待消息通知(無所謂同步或者異步)時(shí)的狀態(tài)有關(guān)。
也就是說阻塞與非阻塞主要是程序(線程)等待消息通知時(shí)的狀態(tài)角度來說的翰意。
阻塞調(diào)用是指調(diào)用結(jié)果返回之前木人,當(dāng)前線程會(huì)被掛起,一直處于等待消息通知冀偶,不能夠執(zhí)行其他業(yè)務(wù).函數(shù)只有在得到結(jié)果之后才會(huì)返回醒第。
非阻塞調(diào)用指在不能立刻得到結(jié)果之前,該函數(shù)不會(huì)阻塞當(dāng)前線程进鸠,而會(huì)立刻返回.
表面上看非阻塞的方式可以明顯的提高CPU的利用率稠曼,但是也帶了另外一種后果就是系統(tǒng)的線程切換增加(后面比喻場景很強(qiáng)調(diào)),增加的CPU執(zhí)行時(shí)間能不能補(bǔ)償系統(tǒng)的切換成本需要好好評(píng)估客年。
場景比喻
同步/異步關(guān)注的是消息通知的機(jī)制霞幅,而阻塞/非阻塞關(guān)注的是程序(線程)等待消息通知時(shí)的狀態(tài)
例如小敏下載文件:
1.同步阻塞
小明一直盯著下載進(jìn)度條,到 100% 的時(shí)候就完成量瓜。
說明同步:等待下載完成通知
說明阻塞:等待下載完成通知過程中司恳,不能做其他任務(wù)處理
2.同步非阻塞
小明提交下載任務(wù)后就去打游戲,每過一段時(shí)間就去瞄一眼進(jìn)度條绍傲,看到 100% 就完成扔傅。
說明同步:等待下載完成通知
說明非阻塞:等待下載完成通知過程中耍共,去打游戲了,只是時(shí)不時(shí)會(huì)瞄一眼進(jìn)度條
【小明必須要在兩個(gè)任務(wù)間切換猎塞,關(guān)注下載進(jìn)度】
3.異步阻塞
小明換了個(gè)有下載完成通知功能的軟件试读,下載完成就“叮”一聲荠耽。
不過小明仍然一直等待“杜敉”的聲音(看起來就很傻)。
說明異步:下載完成“逗粒”一聲通知
說明阻塞:等待下載完成“兑谅模”一聲通知過程中,不能做其他任務(wù)處理
4.異步非阻塞
仍然是那個(gè)會(huì)“犊钗ィ”一聲的下載軟件唐瀑,小明提交下載任務(wù)后就去干別的,聽到“恫宓”的一聲就知道完成了哄辣。
說明異步:下載完成“叮”一聲通知赠尾;
說明非阻塞:等待下載完成“读λ耄”一聲通知過程中,去干別的任務(wù)了气嫁,只需要接收“兜贝埃”聲通知即可
【軟件處理下載任務(wù),小明處理其他任務(wù)寸宵,不需關(guān)注進(jìn)度崖面,只需接收軟件“叮”聲通知梯影,即可】
綜上所述
同步和異步僅僅是關(guān)注的消息如何通知的機(jī)制巫员,而阻塞與非阻塞關(guān)注的是等待消息通知時(shí)的狀態(tài)。也就是說甲棍,同步的情況下简识,是由處理消息者自己去等待消息是否被觸發(fā),而異步的情況下是由觸發(fā)機(jī)制來通知處理消息者感猛,所以在異步機(jī)制中七扰,處理消息者和觸發(fā)機(jī)制之間就需要一個(gè)連接的橋梁
在銀行的例子中,這個(gè)橋梁就是小紙條上面的號(hào)碼唱遭。
在小明的例子中戳寸,這個(gè)橋梁就是軟件“叮”的聲音拷泽。