C# ASP.NET单工作线程?(内存会话)

C# ASP.NET单工作线程?(内存会话),c#,asp.net-mvc,parallel-processing,C#,Asp.net Mvc,Parallel Processing,我在ASP.NET MVC应用程序中使用内存会话,这意味着我只能有一个工作线程,对吗?这是否意味着我的应用程序中有并行处理(比如并发请求)?我的申请一次只接受一个请求吗 编辑:根据IIS7网站: If the application uses in-process session variables, the application will not function correctly, because the same user requests are picked up by di

我在ASP.NET MVC应用程序中使用内存会话,这意味着我只能有一个工作线程,对吗?这是否意味着我的应用程序中有并行处理(比如并发请求)?我的申请一次只接受一个请求吗

编辑:根据IIS7网站:

If the application uses in-process session variables, 
the application will not function correctly, because the same user requests 
are picked up by different worker processes that 
do not share the same session details.


这意味着内存会话只能有1个工作线程,还是没有?另请参见IIS7论坛。

您的应用程序一次接收多个请求。根据您在这里的编辑和评论,您正在查找有关Web花园和会话的信息,而不是线程和会话状态

Web Gardens使用多个进程,在会话状态下就像负载平衡器一样。每个进程都有一个单独的内存会话存储。IIS将向任何可用进程发送请求。由于进程不共享会话状态,因此只有在所有web garden进程之间共享会话提供程序时,会话使用才会真正起作用

Web Gardens只有在您将SQL Server之类的东西用于会话状态,并且希望与特定的CPU/核心具有亲缘关系时才有意义。由于可以增加线程数量,因此对于某些用户来说,这可能比使用web gardens更合适。然而,由于特定的工作负载或应用程序特性,一些应用程序可能在web gardens中表现更好。在测试中使用WebGardens还可以帮助解决负载平衡中存在的一些潜在问题


我相信它使用.NET线程池,默认情况下有20个线程。进入服务器的每个请求都可以在单独的线程上处理。内存会话意味着您通常一次只能有一个前端web服务器,而不是一个工作线程:D

原因是在一台机器上的会话中存储的任何信息在另一台机器上都不可用。如果您有两个前端web服务器,并且您的代理或防火墙执行“负载平衡”,从而将请求随机分配给web服务器,那么您将遇到问题。也就是说,通过所谓的“粘性会话”,用户总是被发送到同一台服务器,这个问题很容易解决


-Oisin

这不会给内存会话带来问题吗?据我所知,会话需要保持在同一个线程上,否则一切都会崩溃。我不明白为什么线程会链接到会话。会话ID应该足以查找会话数据,这样就没有理由需要映射到同一个线程。即使会话数据“在内存中”,也会单独存储。相同的API用于插入其他会话提供程序。使用IIS7站点和论坛链接的引用更新了问题。假定进程内(内存中)会话不跨工作线程共享信息。这是错误的信息吗?这是正确的信息,但你没有真正理解这里的细微差别。进程与线程不同。Web花园启动多个进程,但IIS将每个请求映射到。这几乎模拟了一个负载平衡的环境。因此,进程具有单独的会话状态,但最终用户可能会在下一个请求中点击任一进程。+1感谢您的解释。那么在一台服务器上安装web gardens有意义吗?什么时候可以增加单个IIS进程的工作线程数?后续问题:为什么不能在计算机上启用“web garden”处理,然后在一台服务器上跨多个CPU?这会导致随机会话丢失。我的理解是web garden在一台机器上创建多个进程。每个进程都有不同的会话状态存储。进程和线程在ASP.NET和IIS上下文中的含义不同。多个进程意味着您有多个会话存储。