今天跟旭哥聊到的并發的機制,深入了解到了同步異步阻塞非阻塞的差別,自己總結一下,加強了解,廢話不多說,就是幹。
提出問題
同步和異步的差別是什麼?
阻塞和非阻塞的差別是什麼?
你可以嘗試在腦子裡想一下這個問題,先有自己的答案,然後再往下看
。
。
。
。
。
。
來看一下答案
同步和異步的關注點的是值的傳回方式,
同步是服務方處理完後再響應使用者。
而異步是服務方目前就先傳回一個收到請求的值,然後真正處理完再傳回結果,或者調用方再請求拉取結果。
阻塞和非阻塞的關注點是調用方的狀态
阻塞是在服務方處理時,調用方的狀态是什麼都不幹。
而非阻塞是在服務方處理時,調用方去幹自己的事情,不在這幹等着,調用方自己去查詢結果,或者有結果時服務方通知調用方。
優缺點
阻塞
優點:能及時傳回資料,沒有延遲。
缺點,需要付出等待的時間代價。
非阻塞
優點:與阻塞比較,非阻塞不需要等待任務結果, 可以去執行其他任務,是以對并發的支援比較好。
缺點:不能及時的擷取傳回結果。因為每隔一段時間才回去詢問,但是可能在兩次詢問動作的時間間隔内任務就可能完成了,這回導緻整體資料的吞吐量的降低。
組合後的場景
我們來通過例子看下組合後的場景
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPRVmb1cVW1QWbihGbHVmb1cVWv5kMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL5IDO4UTNzETMxETMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
同步阻塞
就是小明去無名緣吃米線,點了一個肉沫米線,服務員說大概半個小時可以做好,你得等一會。然後小明什麼都不幹就在這等着,等做好了再去幹找座位。
BIO就是同步阻塞模式,我們的寫的大部分方法都是同步阻塞的。
同步非阻塞
還是這個例子,
就是在師傅在坐米線同時,小明也沒閑着,他去了個座位,他刷了會手機,但是每過10分鐘,他都去看一下飯做好了沒。
NIO就是同步非阻塞模式,
異步非阻塞
繼續
小明點完米線,服務員給了小明一個号,說米線好了我喊你,然後小明就去找座位記單詞了。
AIO是異步非阻塞模式,Callable和一些帶有回調方法的都是異步非阻塞模式。
異步阻塞
這種方式很傻,一般沒人會去用