首先,什么叫异步,异步与同步相对,异步就是主线程遇见了特别费时间的任务A,就把A交给了子线程,让子线程完成,而主线程在把任务A交给子线程后继续执行之后的任务B,当子线程完成主线程交给他的任务A后,给主线程返回一个结果,主线程就先停下手中的任务B,将A任务彻底完成,然后再继续B任务。异步大概流程就是这样,网上有许多例子都举得比较生动,所以这里就不说了。同步是什么,同步就是无论遇见什么任务都是他执行,而且无论多长时间他都会等待当前任务执行完成后才会执行下一个任务。
下面就对同步与异步优劣的比较,我上网找了找,发现这位老哥写的挺好(https://blog.csdn.net/qq_21033663/article/details/51564786),大致内容如下:
首先是异步的使用场景:
1、不涉及共享资源,或对共享资源只读,即非互斥操作
2、没有时序上的严格关系
3、不需要原子操作,或可以通过其他方式控制原子性
4、常用于IO操作等耗时操作,因为比较影响客户体验和使用性能
5、不影响主线程逻辑
稍微总结一下,1.对共享资源进行非互斥操作,2.在时间顺序上没有严格要求,3.不懂,4.常用与IO操作,5.不能影响主线程进行
然后是同步异步各自优势:
同步的好处:
1、同步流程对结果处理通常更为简单,可以就近处理。
2、同步流程对结果的处理始终和前文保持在一个上下文内。
3、同步流程可以很容易捕获、处理异常。
4、同步流程是最天然的控制过程顺序执行的方式。
异步的好处:
1、异步流程可以立即给调用方返回初步的结果。
2、异步流程可以延迟给调用方最终的结果数据,在此期间可以做更多额外的工作,例如结果记录等等。
3、异步流程在执行的过程中,可以释放占用的线程等资源,避免阻塞,等到结果产生再重新获取线程处理。
4、异步流程可以等多次调用的结果出来后,再统一返回一次结果集合,提高响应效率。
以上是那位老哥写的,我使用异步并不是很多,我也总结了一下同异步的优点:
同步:可以避免死锁,避免多线程同时进行对某一共享资源进行互斥操作。
异步:可以同时处理多个任务,提高了效率。