ASP.NET:如何处理并行请求

Bud*_*dda 8 asp.net parallel-processing msdn

让我们在网站上有2页成像:快速和慢速.慢速页面请求执行1分钟,请求快速5秒.

整个我的开发生涯我认为如果第一次启动请求很慢:他将对DB进行(同步)调用...等待回答...如果在此期间请求快速页面将完成,此请求将被处理系统正在等待DB的响应.

但今天我发现:http: //msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx

HttpApplication类的一个实例用于在其生命周期中处理许多请求.但是,它一次只能处理一个请求.因此,成员变量可用于存储每个请求数据.

这是否意味着我原来的想法是错的?

你能澄清一下他们的意思吗?我很确定这件事是我所期待的......

Ale*_*vic 6

如果两个请求都使用具有读/写访问权限的相同会话状态,则必须在服务器端按顺序处理请求,因为asp.net会话锁定.

您可以在此处找到更多信息:http: //msdn.microsoft.com/en-us/library/ie/ms178581.aspx

并发请求和会话状态

对会话状态的访问是每个会话独占的,这意味着如果两个不同的用户发出并发请求,则同时授予对每个单独会话的访问权限.但是,如果对同一会话发出两个并发请求(通过使用相同的SessionID值),则第一个请求将获得对会话信息的独占访问权.第二个请求仅在第一个请求完成后执行.(如果由于第一个请求超过锁定超时而释放信息的独占锁定,则第二个会话也可以访问.)如果@ Page指令中的EnableSessionState值设置为ReadOnly,则只读请求会话信息不会导致会话数据的独占锁定.但是,会话数据的只读请求可能仍然必须等待由会话数据的读写请求设置的锁定才能清除.


Kla*_*sen 4

你原来的想法是对的,文档也是对的。IIS 工作进程可以生成许多线程,每个线程都有自己的类实例HttpApplication

  • 是的,在任何给定时刻都可能有多个 HttpApplication。每个请求在请求期间都独占一个线程。因此,每个请求一个 HttpApplication,但可以跨请求重用。假设一个请求正在进行中并且 IIS 收到一个新请求。它将在 web 应用程序的 AppDomain 之一中创建一个新的 HttpApplication 实例,并使用新的 HttpApplication 来服务请求。global.asax 中的 Application_Start 是一件有趣的事情。它实际上只在每个 APPDOMAIN 运行一次,而不是 HttpApplication。另一方面,像 HttpModules 这样的东西每个 HttpApplication 运行一次。 (2认同)