2009-04-27 19 views
1

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

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

+0

看看基本的解释: Donny 2012-01-23 07:14:38

回答

3

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

更直接的问题,为什么要同时使用......您可以异步工作单元,以便您从另一个工作单元释放线程以开始工作,而无需等待其他线程完成。这可以让应用程序一次实现更多工作。

无论如何,所有的aspx请求都在Worker Thread中执行,但是如果您的请求异步分块,它可以执行其中的一部分并将线程返回到池中,而不是一次性执行请求中的所有内容。

这是棘手和困难的掌握所以要小心。 :)

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

外的ASP,Windows窗体有作为 “无限的” 线程池没有这样的事。当你启动的线程多于/ OS可以处理的线程时,你会经常开始上下文切换,以至于你将无法实现线程化的目的。因为这是一个非常大的和先进的话题,所以我会进一步阅读这个主题。

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

+0

好的,但我的问题是有关ASP.NET世界之外的场景,其中线程限制要高得多(几乎没有限制) – 2009-04-27 01:53:46

2

基本上,它是一种浪费有线程在等待无所事事。这不是一个有限的线程池问题,也不是你能做多大的问题。将每个线程都用到最大容量是一种普遍的愿望。当一个线程可能在做其他有用的事情时,等待一个网络调用或者一段长长的I/O是没有意义的。这种欲望在可扩展性,性能和吞吐量等概念中被量化,但这不一定是净目标。净目标是尽可能多地使用稀缺资源(处理器)。一个有趣的对比是并行化的概念。当您拥有大量资源并且不一定需要多少任务时,您的目标就是正确分配任务。

3

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

相关问题