【问题标题】:Multi-threading in Web Application (WCF / WebAPI)Web 应用程序中的多线程 (WCF / WebAPI)
【发布时间】:2013-08-24 09:49:14
【问题描述】:

我有一个“引擎”,我想通过 HTTP 层(使用 WebAPI / WCF 托管)公开它。

该引擎对大量数据执行一些简单的只读操作,并且真正受益于并行性。从 for(...) 到 Parallel.For(...) 的简单切换确实很神奇。

现在我认为我们不应该在 Web 服务器中执行此类多线程,因此我正在尝试找出托管它的最佳方式。

理想情况下,我希望将其作为标准 Web 应用程序托管在 IIS 中,使用 WebAPI 或 WCF。如果这不是一个好的解决方案,还有什么好的替代方案?

在标准 Windows 服务中自托管 WebAPI 或 WCF 会更好吗?我不确定这里的问题是 IIS 还是 ASP.NET 特定的。

或者也许这不是问题,我只是担心太多?

任何意见将不胜感激。

谢谢

【问题讨论】:

    标签: c# asp.net wcf iis asp.net-web-api


    【解决方案1】:

    我不完全清楚您的顾虑是什么,但我会尽力为您提供一些您可以决定的基础:

    您可以安全地在 IIS/ASP.NET 中使用多线程。当然,对于许多并行请求,您不需要这样做,因为并行发生在更高级别(实际上,虽然吞吐量会稍微受苦,但只是轻微)。尽管您可以使用较低级别的并行性 (Parallel.For) 来减少延迟,但并行请求很少。

    因此,ASP.NET 中的多线程更多的是减少延迟而不是增加吞吐量。

    我看不出自托管会如何改变这一切。

    您似乎有点担心这是一种可行的方法。试着提出具体的问题,我会解决它们。

    【讨论】:

    • 感谢,并为定义不明确的问题道歉。我的印象是(现在很难找到引用),通过在 Web 应用程序中创建线程,我们从 IIS 用于服务请求的同一线程池中分配线程。因此,如果我们增加并发用户的数量,我们更有可能耗尽线程池,这基本上会阻止 IIS 处理新请求。现在如果2个线程池不一样,这显然是不适用的。更有意义吗?
    • a) ASP.NET 和任务的线程池是相同的,但只要应用程序没有过载,这不是问题。如果它过载,无论如何这都是一个问题,无论线程如何,您都需要解决。并行性不会使重载(显着)变得更糟。 b) 您可以使用 TaskScheduler API 使用第二个线程池,但这并不能解决重载问题。没有帮助。我应该解决任何其他问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多