什么是同步编程、异步编程??
用异步模式,则程序中的一个线程执行到这个操作时,这个线程只是执行一些必要的初试化工作,启动这个操作后就继续执行后面的语句,不等待操作返回的结果。 展开
同步编程:传统的同步编程是一种请求响应模型,调用一个方法,等待其响应返回。就是 一个线程获得了一个任务,然后去执行这个任务, 当这个任务执行完毕后,才能执行接下来的另外一个任务。
异步编程:异步编程就是要重新考虑是否需要响应的问题,也就是缩小需要响应的地方。因为越快获得响应,就是越同步化,顺序化,事务化,性能差化,异步编程通常是通过fire and forget方式实现。
扩展资料:
在同步编程中,所有的操作都是顺序执行的,比如从socket中读取(请求),然后写入(回应)到socket中,每一个操作都是阻塞的。
异步编程的原则是,让进程处理多个并发执行的上下文来模拟并行处理方式 ,异步应用使用一个事件循环,当一个事件触发暂停或恢复执行上下文:
只有一个上下文处于活动状态,上下文之间进行轮替,代码中的显示指令告诉事件循环,哪里可以暂停执行,这时,进程将查找其他待处理的线程进行恢复,最终,进程将回到函数暂停的地方继续运行,从一个执行上下文移到另一个上下文称为切换。
参考资料来源:百度百科-异步编程
我们知道,在一般的程序语言中,如果没有特殊处理,代码都是以同步方式进行的。通俗讲就是“一个接一个”,每个操作都在上一个操作完成之后完成。
如果你写过窗体应用程序,可能会碰到这样一个情况:直接在窗体事件函数中跑IO操作、网络操作或耗CPU大的操作时,窗体会出现明显的卡顿现象。原因在于窗体的消息循环被耗时的操作停住了,不能响应用户。这就是同步编程的缺点,操作直接会有阻塞。
异步就能很好地解决这个问题。通常我们实现异步采用的方法是多线程。
显而易见,这样做的好处就在于操作之间不会互相堵塞。比如,你可以在窗体上放一个加载中的动画,而另一个线程做一些耗时的工作。但由于其模型的特殊性,编程时可能会有一定难度,初学者一下子可能不好掌握。当然,熟练之后,你就会发现异步编程的好处。
补充一些:
在C#中,普通的异步方法都以Async结尾,通常含有异步方法的对象中都会有响应的完成、进度改变和错误事件以供调用,只需绑定事件即可。
C# 5.0中引入了await和async两个关键字,它们使得异步变得跟简单。
异步编程就是要重新考虑是否需要响应的问题,也就是缩小需要响应的地方。因为越快获得响应,就是越同步化,顺序化,事务化,性能差化。
异步编程通常是通过fire and forget方式实现,发射事件后即忘记,做别的事情了,无需立即等待刚才发射的响应结果了。(发射事件的地方称为生产者,而将在另外一个地方响应事件的处理者称为消费者).异步编程是一种事件驱动编程,需要完全改变思路,将“请求响应”的思路转变到“事件驱动”思路上,是一种软件编程思维的转变.