立即学习:https://edu.csdn.net/course/play/26270/326858?utm_source=blogtoedu
同步的概念
阻塞式调用,调用方必须等待响应方执行完毕才会返回。
同步的使用场景
- 大多数非异步场景(不用异步,就用同步来调用),如:百度搜索,客户端同步调用服务端搜索接口,等待服务端实时结果
- 在编排的流程中,必须等待拿到响应结果才能去做下一步操作,且在实时链路中相互之间有关联或关联数据的。如:电商中商品详情页的查询接口的内部实现
异步
非阻塞式调用,立即返回,调用方无需等待响应方返回实际结果,响应方会通过状态、通知或回调来告知调用方。
异步使用场景:
- 耗时任务,主线程中提交耗时任务到线程池,然后通过Future来异步获取任务执行结果,这里也可以由异步任务发消息等途径来通知主线程
- 电商下单链路的非核心链路调用,为了下单的性能考虑,将订单下发的发货仓库等非实时流程放在后续操作,提高下单的相应速度。
同步异步比较:
同步:
- 优势:
- 可以拿到实时结果进行处理,上下文信息始终在一个代码块,代码处理上更加方便直观
- 对错误和异常处理可以做到实时
- 劣势:
- 耗时的接口响应会影响整个流程的性能
异步:
- 优势:
- 不影响主线乘的执行,降低响应时间,提高应用的性能和效率
- 及时释放系统资源,如线程占用,让系统去做更多有价值的事
- 劣势:
- 为了保障数据最终一致性,需要对账系统去做好监控和保障
- 需要更多异步任务去补偿系统间的数据一致性
阻塞非阻塞
阻塞:
- 调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回
非阻塞:
- 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程,而会立即返回
怎么理解同步异步、阻塞非阻塞?
同步异步:
- 关注点是得到结果的方式
- 同步是实时返回结果,异步是通过共享变量、通知消息或回调来得到结果
阻塞非阻塞:
- 关注点在程序在等待调用结果返回时的状态