异步方法的目的是什么? (。净)

时间:2009-04-27 01:42:27

标签: .net asynchronous

在ASP.NET中,我们使用异步方法,因为线程池具有有限的插槽,并且通过使用异步方法,您可以在方法出站时释放线程池插槽,从而增加服务器可以处理的请求数量时间间隔。

我想在其他类型的应用程序(即Windows窗体)中,线程限制要高得多。在这种情况下,当你有两个版本(同步和异步)时,async方法的目的是什么?

3 个答案:

答案 0 :(得分:3)

你可以在ASP.NET配置中增加工作线程池,我发现它对多核盒子和IIS 6有很大的帮助。从我用IIS 7做的很少,似乎管理线程很多更好,无需调整。

为什么同时使用这两个问题的更直接的问题...你可以异步工作单元,这样你就可以从池中释放一个线程来开始另一个工作单元而无需等待另一个线程完成。这允许应用程序一次分享更多的工作。

无论如何,所有的aspx请求都在一个工作线程中执行,但是如果你的请求是异步的,它可以执行它的一部分并将线程返回到池中,而不是一次性执行请求中的所有内容。 / p>

这很难掌握,所以要小心。 :)

http://www.guidanceshare.com/wiki/ASP.NET_2.0_Performance_Guidelines_-_Threading

在ASP之外,使用Windows表单没有“无限”线程池这样的东西。当你启动更多的线程而不是box / os可以处理时,你会经常启动上下文切换,这样你就会破坏线程的目的。我会进一步阅读这个主题,因为它是一个非常大的高级主题。

http://en.wikipedia.org/wiki/Thread_(computer_science)

答案 1 :(得分:3)

异步方法的目的是提供响应更快的应用程序。如果在同一个线程上运行所有任务,则每次线程必须执行长时间运行的同步操作时,应用程序似乎会停止,因为您的线程正在等待操作完成,因此无法执行任何其他操作。要解决这个问题,您可以将这些任务分叉,以便使用异步调用来分隔线程。

答案 2 :(得分:2)

基本上,让线程无所事事是一种浪费。这不是一个有限的线程池问题或你可以做多大的问题。一般希望让每个线程都使用它的最大容量。让一个线程在网络调用上等待,或者当它可能正在做其他有用的事情时,可能会有很长的I / O是没有意义的。这种愿望在可扩展性,性能和吞吐量等概念中量化,但这不一定是净目标。净目标是使用稀缺资源(处理器)来完成尽可能多的任务。与此有趣的对比是并行化的概念。当你拥有大量资源而不一定有很多任务时,目标就是正确地分配任务。