首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步方法的用途是什么?(.NET)

异步方法的用途是什么?(.NET)
EN

Stack Overflow用户
提问于 2009-04-27 01:42:27
回答 3查看 459关注 0票数 1

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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)

票数 4
EN

Stack Overflow用户

发布于 2009-04-27 03:43:58

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

票数 3
EN

Stack Overflow用户

发布于 2009-04-27 01:58:23

基本上,让线程无所事事地等待是一种浪费。这不是一个线程池的限制或者你能使它多大的问题。这是一个普遍的愿望,让每个线程使用其最大的容量。让一个线程去等待一个网络调用,或者可能是一个很长的I/O,而它可以做其他有用的事情,这是没有意义的。这种需求在可伸缩性、性能和吞吐量等概念中得到了量化,但这不一定是净目标。净目标是将稀缺的资源(处理器)用于尽可能多的任务。与此对应的一个有趣的问题是并行化的概念。这样做的目标是,当您拥有大量资源而不一定有那么多任务时,适当地分配任务。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/792006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档