1. 程式人生 > >同步非同步和阻塞非阻塞

同步非同步和阻塞非阻塞

今天突然看到同步非同步和阻塞非阻塞的問題,一度陷入迷茫,經過我努力的汲取知識,在這裡說下我的理解。

同步非同步:可以理解成這是一種行為。

阻塞非阻塞:可以理解成這是一種狀態。

舉一個我看到的很不錯的例子:

《張大爺燒水》

話說張大爺有兩隻壺,一隻是普通的燒水壺,一隻是有響笛的壺。今天張大爺心情不錯,想泡茶喝。那還等什麼,燒水唄!

(同步阻塞):張大爺拿出了普通的燒水壺開始燒水,然後站在旁邊開始等待水燒開。

這時,張大爺的老伴來了,對張大爺說:你老糊塗了,在這等啥,一會過來看看水燒開沒有不就行了。

(同步非阻塞):於是張大爺看電視劇去了,時不時的過來瞧兩眼水燒開沒。

第二天,張大爺因為晚上睡了個好覺,又心情不錯。沒錯,接著燒水泡茶喝。但是呢,今天不用普通的壺了,今天用有響笛

的壺,放著也是放著,幹嘛不用!

(非同步阻塞):於是張大爺拿出了帶響笛的壺開始燒水,然後站在旁邊等壺的響笛聲,因為水開了,水壺就會響笛。

這時,張大爺的老伴又來了,對張大爺說:你咋不長記性呢,昨天剛說了你,你先去看會電視,等壺響笛不就行了。

(非同步非阻塞):於是張大爺又看電視去了,這次張大爺不用時不時的去看水燒沒燒開了,因為水燒開了水壺就會響笛。等響笛

了,張大爺就可以去泡茶啦。


個人理解:

同步:主動式的。(主動獲取結果)
非同步:被動式的。(被動等結果通知)

同步阻塞:一直等著,直到返回結果,期間啥都不幹。
同步非阻塞:先去幹點其他事,不時回來看看有沒有結果。
非同步阻塞:一直等著,有結果了通知我。
非同步非阻塞:先去幹點其他事,有結果了通知我。