问题源于知乎 怎样理解阻塞非阻塞与同步异步的区别?
以下乃个人见解,如有不对之处,欢迎指出讨论。
概念
同步异步是形容结果的通知形式。通知形式!主动/被动。
阻塞和非阻塞是形容客户端在接受到结果之前的自身状态。
一个是状态,一个是形式。
组合
毫无疑问可以进行组合。2*2=4种结果。
我们最常用的两种组合:
同步阻塞:网络请求的同步形式。主动获取结果,并且获取到结果前其他同线程操作不会执行。
异步非阻塞:网络请求的异步形式。结果靠通知,并且发出请求后就执行其他操作去了。
比较不长见的两种形式:
1.同步非阻塞
典型的就是协程(kt),我记得协程的主打特色就是同步非阻塞。实际上本质还是异步,只不过看着形式是同步。(这不是正好对应了前面对应的异步同步只是形式)。这种组合少的原因一般是不好写吧(我猜)
2.异步阻塞
异步了还阻塞,这不神经病吗?
对于网络请求就是用异步的请求,但是主线程wait住直到接口回调。。。。这tm还不如直接用同步呢,用异步反而复杂了。这种组合少的原因是蠢,会被评价为弱智代码(除非这个操作只能异步,但是其他所有操作又必须等这个操作完成。真出现这种操作,只能说这个操作设计的有问题。)