問題源于知乎 怎樣了解阻塞非阻塞與同步異步的差別?
以下乃個人見解,如有不對之處,歡迎指出讨論。
概念
同步異步是形容結果的通知形式。通知形式!主動/被動。
阻塞和非阻塞是形容用戶端在接受到結果之前的自身狀态。
一個是狀态,一個是形式。
組合
毫無疑問可以進行組合。2*2=4種結果。
我們最常用的兩種組合:
同步阻塞:網絡請求的同步形式。主動擷取結果,并且擷取到結果前其他同線程操作不會執行。
異步非阻塞:網絡請求的異步形式。結果靠通知,并且送出請求後就執行其他操作去了。
比較不長見的兩種形式:
1.同步非阻塞
典型的就是協程(kt),我記得協程的主打特色就是同步非阻塞。實際上本質還是異步,隻不過看着形式是同步。(這不是正好對應了前面對應的異步同步隻是形式)。這種組合少的原因一般是不好寫吧(我猜)
2.異步阻塞
異步了還阻塞,這不神經病嗎?
對于網絡請求就是用異步的請求,但是主線程wait住直到接口回調。。。。這tm還不如直接用同步呢,用異步反而複雜了。這種組合少的原因是蠢,會被評價為弱智代碼(除非這個操作隻能異步,但是其他所有操作又必須等這個操作完成。真出現這種操作,隻能說這個操作設計的有問題。)