Mid*_*one 2 asp.net iis multithreading worker-process static-members
我在理解IIS如何处理其线程上的静态变量时遇到了一些麻烦.我的理解一直是,如果IIS有4个工作进程,它可以同时处理4个请求,并且它与运行网站的4个独立线程相同.任何静态变量都会在每个单独的线程中保留.我有点困惑的原因是我有一个我管理连接和缓存事务的范围.当我测试应用程序时,我没有注意到任何问题,但在我编译它并同时从两个不同的位置点击它后,我似乎遇到了一些冲突.现在,如果这些工作流程是分开的,为什么会这样?可以同时在单个工作线程上处理多个请求吗?这非常重要,因为在这些静态成员中存在唯一的ID来处理管理这些功能的对象的升级,并且看起来他们正试图访问同一个对象.
我在x64机器上的Vista的IIS服务器上运行它.
编辑
对于需要在单个请求中持久保存线程的值,我将这些值放入Web.HttpContext.Current.Items其中似乎可以解决问题.
<ThreadStatic()>可以使用但在请求过程的完整性期间可能无法使用.在我拥有的一个模块中,仅用于变量以指示该线程是否已加载cahcing服务器的设置.如果为true,则说明(不是asp.net)准备从缓存服务器获取数据.
第一个要改变的概念:如果你使用的是ASP.NET,它们是ASP.NET线程,而不是IIS线程.
其次,这是一个.NET问题.静态变量AppDomain在.NET 中共享.由于AppDomain每个IIS应用程序(或多或少)都有一个,这意味着您的静态变量将在应用程序中的所有工作线程之间共享.
将会有超过四个线程,并且它们都将共享相同的变量,这意味着您需要进行锁定,或者您不需要使用静态变量.
无论你的理解是什么,我建议你回过头来弄清楚你从哪里得到这种理解; 然后更新它,因为它与ASP.NET没有太大关系.
编辑:主题已经改变,所以我会稍微改变一下.
您必须对这些变量进行互锁访问.或者,您应该考虑重新评估您的设计.您的设计显然假设了一些不同的模型来访问静力学.事实证明这个假设并不正确.这种假设可能会在整个设计中逐步实现.你应该根据现实重新评估你的设计.