在ASP.NET中使用异步技术释放了哪些资源

本文关键字:放了 释放 资源 技术 异步 NET ASP | 更新日期: 2023-09-27 18:14:58

假设我们有一个aspx网页,它调用一个存储过程,15分钟后在GridView上呈现一个数据表。在我的假设中,我没有运行,比如说,4个asynch,这可能并行发生——只是一个长数据库进程。

在调用栈中至少有3个地方,微软让我尝试用异步方式做事情,用异步页面和web方法,异步ADO。NET调用以及async关键字和异步委托之类的东西。

,

[WebMethod]
public IAsyncResult BeginLengthyProcedure( AsyncCallback cb, object s) {...}
[WebMethod]
public string EndLengthyProcedure(IAsyncResult call) {...}

(ref http://msdn.microsoft.com/en-us/library/aa480516.aspx)

我的心智模型是IIS一次只能有这么多"东西(线程?)"来处理请求,如果你使用异步技术,页面将不会耗尽可用的线程池来处理请求。我认为,虽然异步方法正在运行,它消耗操作系统线程,也许仍然可以粉碎服务器与活动,但IIS将假设它不需要被计算在最大请求,它将处理&因此,应用程序保持响应。

在这个问题的评论中,我对async是否节省了资源以及节省了什么资源感到困惑。我从讨论中得到的印象是,没有关键字"异步"的技术将节省任何关键字"线程"或"资源"的资源。会不会是有些资源被其他请求释放了只是我不知道它的名称?

部分b . 这个限制是多少?它是高到每毫秒只有100个请求才会达到这个限制,还是低到几十个用户每个运行15分钟的同步页面都能达到这个限制?

在ASP.NET中使用异步技术释放了哪些资源

Lucian Wischik,参与。net异步的规范负责人之一,用餐馆服务员的比喻来描述异步编程。

服务员的工作就是在餐桌旁侍候,直到顾客吃完饭。如果你想同时为两张桌子服务,你必须雇用两名服务员。
不是这样的,对吧?为什么?因为你不需要两个服务员!你可以用同一个服务员,在不同的桌子之间共用他。

Talk: Async Part 1 -消息循环和任务类型

因此,与其启动新的线程(这是很昂贵的)只是坐在那里等待,不如让你的主线程在需要很长时间的请求上放一个书签。这就好比你让你的主服务员去查看其他桌子,而他们服务的第一张桌子正忙着选择点什么或吃什么。

现在,如果长时间运行的过程是你的代码正在做的事情,比如处理一个项目列表,异步不会为你节省任何东西。(我想这个类比应该是割草坪,在这种情况下,你需要两台割草机同时割两个草坪。)Async只有在代码等待资源可用或请求完成时才有用,例如要建立的互联网连接或要返回结果的查询。它为您节省了与多线程相关的费用和复杂性。

Lucian在上面的链接中为那些对异步编程知之甚少或一无所知的人提供了一个关于这个主题的精彩演讲。虽然他的演讲主要集中在。net语言中的异步应用,但该理论扩展到了一般的异步编程。