2012-06-19 139 views
18

我正在开发一些关于开发线程安全应用程序的研究。我知道用户可以在同一个应用程序上使用多个线程(如果CPU可以处理多个线程),但我不确定会发生什么情况,以及当有5个用户使用同一个应用程序时,IIS如何处理用户。IIS是否给每个连接的用户一个线程?

IIS做什么,所有在同一个线程上工作的用户?或者他们是否每个都有一个线程?

我是一个新手,当谈到IIS时,请耐心等待。我的问题将帮助我理解是否需要在我的代码中锁定公共静态方法(其中线程安全性很重要)。

+0

http://msdn.microsoft.com/en-us/library/ms525101(v=VS.90).aspx –

回答

9

这是一个很好的阅读开始 - ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0。你应该记住的重要事情 - IIS不会为用户创建线程,它会为并发调用创建线程。当然,你应该创建线程安全的静态方法,如果它们不是纯粹的。

+1

不要忘记会话状态会导致来自同一用户的并发调用序列化。 –

+0

是否意味着像[SignalR](http://signalr.net)这样的持久连接框架将会阻止每个连接用户使用一个线程? –

+0

这是一个很好的链接 – PeteH

4

用户将(或严格地说可能)有一个会话,但不一定有一个专用于它们的线程。如果你考虑一下,那将是一个非常低效的事情。

我建议你开始阅读有关会议而不是线索,如果你想得到如何处理iis的工作。

+0

所以我可以说这个;每个用户都会得到一个会话,并且每个会话可能会在需要时使用一个线程(或多个线程)。它是否正确? –

+3

这是正确的,但不是全部的情况。我在原始答复中试图说明的一点是,对于任何一个用户,他们提出请求并且网站生成响应。很明显,某些线程需要服务于此请求。但是一旦回应完成,线程会发生什么?它不仅仅是在用户提出另一个请求的地方停留。它被IIS重用以服务于其他人的请求。事情的“会话”方面是iis如何识别返回的用户(没有保持线程挂起) – PeteH

+0

这也意味着如果你没有在代码中实现任何多线程,2个会话(每个用户1个)永远不会冲突 –

相关问题