天天看點

一分鐘了解同步、異步、阻塞和非阻塞的差別

今天跟旭哥聊到的并發的機制,深入了解到了同步異步阻塞非阻塞的差別,自己總結一下,加強了解,廢話不多說,就是幹。

提出問題

同步和異步的差別是什麼?

阻塞和非阻塞的差別是什麼?

你可以嘗試在腦子裡想一下這個問題,先有自己的答案,然後再往下看

來看一下答案

同步和異步的關注點的是值的傳回方式,

同步是服務方處理完後再響應使用者。

而異步是服務方目前就先傳回一個收到請求的值,然後真正處理完再傳回結果,或者調用方再請求拉取結果。

阻塞和非阻塞的關注點是調用方的狀态

阻塞是在服務方處理時,調用方的狀态是什麼都不幹。

而非阻塞是在服務方處理時,調用方去幹自己的事情,不在這幹等着,調用方自己去查詢結果,或者有結果時服務方通知調用方。

優缺點

阻塞

優點:能及時傳回資料,沒有延遲。

缺點,需要付出等待的時間代價。

非阻塞

優點:與阻塞比較,非阻塞不需要等待任務結果, 可以去執行其他任務,是以對并發的支援比較好。

缺點:不能及時的擷取傳回結果。因為每隔一段時間才回去詢問,但是可能在兩次詢問動作的時間間隔内任務就可能完成了,這回導緻整體資料的吞吐量的降低。

組合後的場景

我們來通過例子看下組合後的場景

一分鐘了解同步、異步、阻塞和非阻塞的差別

同步阻塞

就是小明去無名緣吃米線,點了一個肉沫米線,服務員說大概半個小時可以做好,你得等一會。然後小明什麼都不幹就在這等着,等做好了再去幹找座位。

BIO就是同步阻塞模式,我們的寫的大部分方法都是同步阻塞的。

同步非阻塞

還是這個例子,

就是在師傅在坐米線同時,小明也沒閑着,他去了個座位,他刷了會手機,但是每過10分鐘,他都去看一下飯做好了沒。

NIO就是同步非阻塞模式,

異步非阻塞

繼續

小明點完米線,服務員給了小明一個号,說米線好了我喊你,然後小明就去找座位記單詞了。

AIO是異步非阻塞模式,Callable和一些帶有回調方法的都是異步非阻塞模式。

異步阻塞

這種方式很傻,一般沒人會去用