参考地址:https://blog.csdn.net/qq_23282479/article/details/80424946
理解①
同步异步是对于被调用者的说明;阻塞非阻塞是对于调用者的说明
被调用者
同步的话就是在没有得到结果之前,该调用就不会返回。但是一旦返回结果,就得到返回值了;
异步的话则相反,调用者一调用之后就直接返回了,所以没有返回结果。而被调用者是通过状态、通知或者回调函数来处理这个调用
调用者
阻塞的话就是调用者在调用这个方法之后不继续执行,直到这个调用结果出来
非阻塞的话就是调用者在调用这个方法之后继续执行,不管此调用
理解②
同步异步是一种线程的操作方式;阻塞非阻塞是线程的状态
同步异步和阻塞非阻塞,不相同也不冲突
同步:主线程自己解决这个函数,主线程可以以(非阻塞/阻塞)状态去获取这个线程执行这个函数得到的值
异步:把这个函数交给别人来处理,主线程可以以(非阻塞/阻塞)状态去获取这个线程执行这个函数得到的值
阻塞:主线程等待解决完这个函数才去做别的事
非阻塞:如果主线程现在做不了这件事或者正在被新开的线程执行,可以去做别的事
别人问我问题(主线程调用函数)
非阻塞
阻塞
同步
我来解决这个问题
如果我还不能开始解决(没获得锁),我就先去做别的事情
我来解决这个问题
等这个问题解决完才去做别的事情
异步
我叫一个新线程解决这个问题
然后我就去做别的事了,做完了通知我
我叫一个新线程解决这个问题
等这个问题解决才去做别的事情
并发并行串行都是对多任务的不同执行方式
实现任务 --> 调用函数
普通解释:
并发:交替做不同事情的能力
并行:同时做不同事情的能力
专业术语:
并发:不同的代码块交替执行
并行:不同的代码块同时执行
执行吃饭任务的时候来了一个打电话任务
- 串行执行:执行完吃饭才去打电话
- 并行执行:可以停下吃饭去打电话,之后再吃饭
- 并发执行:可以一边吃饭 一边打电话