天天看點

同步異步與阻塞非阻塞的差別

問題源于知乎 怎樣了解阻塞非阻塞與同步異步的差別?

以下乃個人見解,如有不對之處,歡迎指出讨論。

概念

同步異步是形容結果的通知形式。通知形式!主動/被動。

阻塞和非阻塞是形容用戶端在接受到結果之前的自身狀态。

一個是狀态,一個是形式。

組合

毫無疑問可以進行組合。2*2=4種結果。

我們最常用的兩種組合:

同步阻塞:網絡請求的同步形式。主動擷取結果,并且擷取到結果前其他同線程操作不會執行。

異步非阻塞:網絡請求的異步形式。結果靠通知,并且送出請求後就執行其他操作去了。

比較不長見的兩種形式:

1.同步非阻塞

典型的就是協程(kt),我記得協程的主打特色就是同步非阻塞。實際上本質還是異步,隻不過看着形式是同步。(這不是正好對應了前面對應的異步同步隻是形式)。這種組合少的原因一般是不好寫吧(我猜)

2.異步阻塞

異步了還阻塞,這不神經病嗎?

對于網絡請求就是用異步的請求,但是主線程wait住直到接口回調。。。。這tm還不如直接用同步呢,用異步反而複雜了。這種組合少的原因是蠢,會被評價為弱智代碼(除非這個操作隻能異步,但是其他所有操作又必須等這個操作完成。真出現這種操作,隻能說這個操作設計的有問題。)