欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

浅谈Asp.Net中的异步与多线程

创建时间:2011年08月10日 16:07  阅读次数:(5445)
分享到:
原来一直以为Asp.Net中的异步就是Ajax中的异步。可以让Web界面加载完一部分就显示一部分,经过多方检阅资料后发现Asp.Net的异步根本就不是这么一回事。

要了解Asp.Net 2.0中的异步处理过程,就得先清楚Page页面的生命周期,详细请参见本站Asp.Net中Page页的生命周期

一、Asp.net同步处理过程:
1,服务器在接收到页面请求后,从线程池中分出一个分配给该线程。
2,该页在执行完毕前,该线程一直处于保留状态,以防止该线程分配给其它的请求。
3,如果该页运算时间很长,此时该线程一直处于挂起状态。
4,该页完成一个生命周期,该线程得已释放。

此时可能会遇到的问题就是:线程池中的可用线程是有限的,如果请求过多,Asp.Net会因503“server unavailable”错误使后续请求失败。

同步请求中生命周期与线程关系图:


二、Asp.Net异步处理过程:
1,服务器开始接收asp.net的请求之后,当前线程立即返回线程池。 
2,asp.net调用注册的BeginEventHandler方法,并立即返回。 
3,线程返回到线程池。同时BeginEventHandler方法返回一个IAsyncResult。 
4,如果BeginEventHandler方法超时,asp.net会调用TimeoutHandler方法。
5,如果在规定时间内返回,asp.net从线程池提取线程并调用EndGetAsyncData方法。 
6,当EndGetAsyncData方法返回之后,asp.net开始执行该页生命周期其余的部分。

这样就弥补了同步中当前线程一起被挂起的问题,原来被挂起的线就可以服务于另外的请求。

异步请求中生命周期与线程关系图:


注意:如查想让你的Page页支持异步,一定要设置Page的Async属性为true.
总结:使用好Asp.Net中的异步处理,可以使你的程序性能得到优化。N0T餝u髞坃YS
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 46+80=? 的结果(结果是:126)
结  果: