假设我们有一个调用存储过程的aspx网页,15分钟后在GridView上呈现数据表。在我的假设中,我没有运行,比如说,4 asych,它可以并行发生--只是一个长的数据库过程。
在调用堆栈上至少有3个位置,Microsoft允许我尝试以异步方式完成一些事情,包括异步页面和web方法、异步ADO.NET调用以及异步关键字和异步委托等。
例:
[WebMethod]
public IAsyncResult BeginLengthyProcedure( AsyncCallback cb, object s) {...}
[WebMethod]
public string EndLengthyProcedure(IAsyncResult call) {...}(参考文献http://msdn.microsoft.com/en-us/library/aa480516.aspx )
我的心理模型是IIS只能有那么多“东西(线程?)”立即处理请求,如果您使用异步技术,页面将不会耗尽可用于接收请求的线程池。我认为当异步方法运行时,它会消耗OS线程,并且可能仍然会用活动压碎服务器,但是IIS将假设它不需要被计算到它将处理的最大请求,因此应用程序保持响应。
In the comments on this question here,我对异步是否以及节省了哪些资源感到困惑。我从那次讨论中得到的印象是,没有任何包含关键字“异步”的技术会保存包含关键字“线程”或“资源”的任何资源。是否有一些资源被释放用于其他请求,而我只是不知道它的名称?
Part B.这个限制是什么,它是如此之高,以至于每毫秒只有强烈的、100多个请求才能达到这个极限,还是足够低到每个运行同步15分钟页面的几十个用户都能达到这个极限?
发布于 2013-05-23 18:32:46
Lucian是涉及.NET异步的规范负责人之一,他用服务员的类推(在餐厅)描述了异步编程。
“侍者的工作是在餐桌上等客人吃完饭。如果你想同时提供两张桌子,你必须雇两名服务员。” 那不是真的,对吧?为什么?因为你不需要两个服务员!你可以用同一个服务生,把他分在桌子上。 Talk: Async Part 1 - the message-loop, and the Task type
因此,与其简单地坐着等待新线程(这很昂贵),不如让主线程在需要很长时间的请求上放置某种书签。这类似于允许您的主要服务员检查其他桌子,而他们提供的第一张桌子是忙着选择点什么或吃什么。
现在,如果您的代码正在执行长时间运行的流程,比如处理项目列表,异步将不会为您节省任何东西。(我想这个比喻应该是割草,在这种情况下,你需要两个割草机同时修剪两个草坪。)只有当您的代码等待资源可用或请求完成时(例如要建立的internet连接或返回结果的查询)时,异步才会有用。它节省了与多线程相关的费用和复杂性。
卢西安在上面的链接上为那些对异步编程知之甚少的人提供了一个很好的关于这个主题的演讲。虽然他的演讲侧重于.NET语言所应用的异步,但理论扩展到了异步编程的一般情况。
https://stackoverflow.com/questions/16720760
复制相似问题