1. 程式人生 > 實用技巧 >同步、非同步、阻塞、非阻塞

同步、非同步、阻塞、非阻塞

  1. 同步阻塞:小明一直盯著下載進度條,到 100% 的時候就完成。

同步體現在:等待下載完成通知;

阻塞體現在:等待下載完成通知過程中,不能做其他任務處理;

  1. 同步非阻塞:小明提交下載任務後就去幹別的,每過一段時間就去瞄一眼進度條,看到 100% 就完成。

同步體現在:等待下載完成通知;

非阻塞體現在:等待下載完成通知過程中,去幹別的任務了,只是時不時會瞄一眼進度條;【小明必須要在兩個任務間切換,關注下載進度】

  1. 非同步阻塞:小明換了個有下載完成通知功能的軟體,下載完成就“叮”一聲。不過小明仍然一直等待“叮”的聲音(看起來很傻,不是嗎)。

非同步體現在:下載完成“叮”一聲通知;

阻塞體現在:等待下載完成“叮”一聲通知過程中,不能做其他任務處理;

  1. 非同步非阻塞:仍然是那個會“叮”一聲的下載軟體,小明提交下載任務後就去幹別的,聽到“叮”的一聲就知道完成了。

非同步體現在:下載完成“叮”一聲通知;

非阻塞體現在:等待下載完成“叮”一聲通知過程中,去幹別的任務了,只需要接收“叮”聲通知即可;【軟體處理下載任務,小明處理其他任務,不需關注進度,只需接收軟體“叮”聲通知,即可】

也就是說,同步/非同步是“下載完成訊息”通知的方式(機制),而阻塞/非阻塞則是在等待“下載完成訊息”通知過程中的狀態(能不能幹其他任務)

,在不同的場景下,同步/非同步、阻塞/非阻塞的四種組合都有應用。

所以,綜上所述,同步和非同步僅僅是關注的訊息如何通知的機制,而阻塞與非阻塞關注的是等待訊息通知時的狀態。也就是說,同步的情況下,是由處理訊息者自己去等待訊息是否被觸發,而非同步的情況下是由觸發機制來通知處理訊息者,所以在非同步機制中,處理訊息者和觸發機制之間就需要一個連線的橋樑

在銀行的例子中,這個橋樑就是小紙條上面的號碼。

在小明的例子中,這個橋樑就是軟體“叮”的聲音。

本篇部落格是搬的別處的,這裡附上鍊接:https://my.oschina.net/xianggao/blog/661085