我需要构建一个 Web 应用程序 (MVC),它使用第三方 win32 dll 作为所有业务逻辑的网关(包含登录机制、功能和维护一些状态)。此 dll 不是为多线程设计的。在 MTA 方案中,dll 在一定时间后发生故障。推荐的解决方案是在 ASP-Classic 模式下运行 ASP.NET MVC(STA 使用 Asp-CompatHandler)。我成功地尝试了这个 - 一切运行稳定。问题是,会有很多并发用户,一些函数调用需要几秒钟(最多 10 秒!)。如果所有用户互相阻止,这将变得可怕。在同一应用程序中最小化阻塞效应的最佳方法是什么?说只有十个用户应该互相阻止?
最好是: ...网络在 MTA 中运行 ...网络只需部署一次 ...一切都在同一个进程中运行
谁能给我一些建议来解决这个问题?
谢谢!马丁
更新 - 找到解决方案: 感谢 Ami Bar 的“智能线程池”,我可以(轻松)完成我正在寻找的行为。我实现了一个工作者概念(特定数量的用户共享一个工作者并在该工作者中相互阻塞),对于每个工作者,我现在拥有自己的线程池实例,其中一个线程的最大和最小数量。好吧,这不是线程池的想法,但它使处理工作项变得非常容易,并且它还有一些不错的其他功能。Web 应用程序现在正在 MTA 上运行。我将准备一些负载测试,看看它在几个小时内是否稳定。见这里: http: //www.codeproject.com/Articles/7933/Smart-Thread-Pool