我正在学习一个名为pet shop的经典应用程序,它使用.net技术。为了处理订单数据,应用程序的作者提供了两个解决方案。一个是将订单数据同步插入数据库,另一个,这是异步的,将订单数据放入消息队列(MSMQ技术),然后使用线程接收订单数据,最后,将数据插入数据库。第一个解决方案很简单,另一个不是,我想知道什么时候采用异步模式,给应用带来什么好处?性能还是其他?
答案 0 :(得分:0)
许多普通程序做两件事:
数据库通常位于远程服务器上,往返时间很长(超过200-500毫秒)
因此,即使数据库访问处于活动状态,此类程序中的一个重要目标是保持GUI响应。这是通过异步数据库访问来完成的。
请注意:虽然使用MSMQ和多线程的示例很容易学习,但现在使用async/await
机制完成了非常类似的操作,这种机制更易于使用。
答案 1 :(得分:0)
只要同时尝试完成多项操作,就会使用异步。
在基本服务或可能的控制台应用程序中,您可能希望进行数据库,文件或网络操作,并且通常您的代码必须在继续之前等待结果。这是一个明确的同步程序,其中async不会改进任何东西,并且可能会以性能为代价增加复杂性。
如果另一方面,您可以在等待新请求完成时处理其他内容(可能是先前的请求结果),您可以在发出请求的停机时间内使用该cpu。
在处理UI时,首先会出现这种情况。大多数本机UI技术将在与负责重绘UI的线程相同的线程上运行代码。这意味着一个按钮,当单击该按钮时,将数据从数据库同步加载到应用程序中将阻止用于重绘UI的线程。你可能会在编写糟糕的软件中看到这一点,按下按钮就会被按下。
另一种模式是并行编程。在引擎盖下,这许多线程经常使用相同的逻辑但具有不同的数据。这可以大大提高数据集处理速度,但与原始问题有点偏离主题。
作为一般规则,如果它使用外部资源(如文件,数据库或网络),或者只是希望执行时间明显,请将其设置为异步。