在ASP.NET中,我们使用异步方法,因为线程池具有有限的插槽,并且通过使用异步方法,您可以在方法出站时释放线程池插槽,从而增加服务器在同一时间间隔内可以处理的请求数量。
我猜在其他类型的应用程序(即Windows窗体)中,线程限制要高得多。在这种情况下,当您有两个版本(同步和异步)时,异步方法的用途是什么?
发布于 2009-04-27 01:48:37
您可以在ASP.NET配置中增加工作线程池,我发现它在多核盒和IIS6上有相当大的帮助。从我使用IIS7所做的很少的工作来看,它似乎可以更好地管理线程,而不需要调整。
更直接的问题是为什么要同时使用这两个工具。您可以异步一个工作单元,以便从池中释放一个线程供另一个工作单元开始,而无需等待另一个线程完成。这使得应用程序可以一次处理更多的工作。
无论如何,所有的aspx请求都是在工作线程中执行的,但是如果您异步请求的块,它可以执行其中的一部分,并将线程返回到池中,而不是一次性执行请求中的所有内容。
它很棘手,很难掌握,所以要小心。:)
http://www.guidanceshare.com/wiki/ASP.NET_2.0_Performance_Guidelines_-_Threading
在ASP之外,windows窗体中没有“无限”线程池这样的东西。当你启动的线程数超过了box/os的处理能力时,你会频繁地开始上下文切换,这就违背了线程化的目的。我会进一步阅读这个主题,因为它是一个非常大的和高级的主题。
http://en.wikipedia.org/wiki/Thread_(computer_science)
发布于 2009-04-27 03:43:58
异步方法的目的是提供响应速度更快的应用程序。如果在同一线程上运行所有任务,则每次线程必须执行长时间运行的同步操作时,应用程序似乎都会停止,因为线程正在等待操作完成,因此无法执行任何其他操作。要解决此问题,您可以将这些任务分叉到具有异步调用的单独线程。
发布于 2009-04-27 01:58:23
基本上,让线程无所事事地等待是一种浪费。这不是一个线程池的限制或者你能使它多大的问题。这是一个普遍的愿望,让每个线程使用其最大的容量。让一个线程去等待一个网络调用,或者可能是一个很长的I/O,而它可以做其他有用的事情,这是没有意义的。这种需求在可伸缩性、性能和吞吐量等概念中得到了量化,但这不一定是净目标。净目标是将稀缺的资源(处理器)用于尽可能多的任务。与此对应的一个有趣的问题是并行化的概念。这样做的目标是,当您拥有大量资源而不一定有那么多任务时,适当地分配任务。
https://stackoverflow.com/questions/792006
复制相似问题