![]() |
爱玩的人字拖 · 江铃汽车(SZ000550)股票股价_股价行 ...· 1 年前 · |
![]() |
聪明的鞭炮 · 第36话-木木已成舟-漫画牛· 1 年前 · |
![]() |
失恋的橡皮擦 · 江歌案,陈世峰回国后会被判死刑吗? - 知乎· 1 年前 · |
![]() |
烦恼的八宝粥 · 只差官宣?长城汽车或收购福建新龙马_腾讯新闻· 1 年前 · |
![]() |
含蓄的炒饭 · 拿韩国LG电池diss友商自燃王 ...· 1 年前 · |
我将建立一个Asp.net MVC 3网页。
:视图(web页面)调用大约五个Ajax(jQuery)方法,这些方法在控制器中返回JsonResult,并在web页面上呈现结果。
Control :控制器方法使用EF4读取Server 2008数据库。根据服务器负载的不同,执行两个SQL语句可能需要半分钟时间。
我希望用户能够尽快看到从快速控制器/数据库调用返回的内容。这个页面不会有太多的用户(可能多达15个)。如果长期运行控制器方法不是异步的,那么它们会阻塞其他控制器吗?或者,只要线程池足够大,足以处理用户的峰值请求,这是无关紧要的吗?
从用户的角度来看,加载初始网页是同步的,也就是说,他必须等到服务器交付页面。但是,Ajax请求在他看来是异步的,因为他已经可以看到页面的一部分。
从服务器的角度来看,一切都是同步的。有一个HTTP请求需要处理,答案是HTML、JSON或其他什么。客户端将等待直到收到答案。几个请求可以并行处理。
因此,除非您实现了一些阻止某些请求的特殊锁定(无论是在web服务器上还是在数据库中),否则不会阻塞任何东西。
对我来说,提议的方法似乎还不错。
更新:
有一件事我忘记了: ASP.NET包含一种锁定机制,用于同步对会话数据的访问,如果您有来自同一个用户的几个并发请求,就会以这种方式进行访问。查看一下
SessionState
属性,以找到解决该问题的方法。
更新2:
从用户的角度来看,对于异步行为,不需要使用
AsyncController
类。它们是为其他东西而构建的,这与您的情况无关,因为只有15个用户。
如果长期运行控制器方法不是异步的,那么它们会阻塞其他控制器吗?
首先要注意的是,所有这些控制器操作都不应该有对会话的写访问权。如果它们写入会话,无论它们是同步的还是异步的,它们总是按顺序执行,永远不会并行执行。这是因为ASP.NET会话并不是线程安全的,如果来自同一会话的多个请求到达,它们将排队。如果你只是在读会话内容,那就没问题了。
现在,慢控制器操作不会阻止快速控制器操作。不管它们是否同步。对于长时间的控制器操作,只有在使用异步ADO.NET方法访问数据库并因此受益于I/O完成端口时,才能使它们异步。它们允许您在I/O操作(如数据库访问)期间不使用任何线程。如果使用对数据库的标准阻塞调用,则异步操作不会带来任何好处。
我建议您使用 下列条款 来更深入地了解什么时候异步操作可能是有益的。
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券
![]() |
聪明的鞭炮 · 第36话-木木已成舟-漫画牛 1 年前 |
![]() |
失恋的橡皮擦 · 江歌案,陈世峰回国后会被判死刑吗? - 知乎 1 年前 |
![]() |
烦恼的八宝粥 · 只差官宣?长城汽车或收购福建新龙马_腾讯新闻 1 年前 |