【问题标题】:Lightweight Thread Pool Libraries in .NET.NET 中的轻量级线程池库
【发布时间】:2009-02-17 23:34:26
【问题描述】:

我正在寻找 .NET 中的线程池库

  • 我应该能够推送大约 100.000 个任务,因此应该为“阻塞”提供支持。 (显然我不能一次推送这么多任务,所以在添加新任务时应该支持一些阻塞,并且应该阻塞线程直到有新插槽可用
  • 不过分复杂
  • 没那么贵(内存 - CPU 方面)
  • 免费/开源(商业友好许可证)

我已经有了自己的支持所有这些的解决方案,但我不太确定它是否是最好的实现。所以我想看看其他库。

这将主要用于 HTTP 请求,因此更少的 CPU 更多的响应等待。这意味着 100 个并发线程是可以接受的。

【问题讨论】:

    标签: .net multithreading http


    【解决方案1】:

    我最近看到的最好的是 Jeffery Richter 的PowerThreading library。您可能还想查看this Channel 9 video

    PowerThreading 库的好处在于,它允许在多个请求之间共享单个线程,从而有效地利用了 ThreadPool。

    【讨论】:

      【解决方案2】:

      为什么不直接使用 .NET 线程池?

      【讨论】:

      • 你有没有实际使用过 .NET 线程池并阅读过我的要求?因为.Net Threadpool 实际上并不适合这个。一次不能处理 100 个线程,会消耗太多内存,并且设计上没有阻塞功能。
      【解决方案3】:

      Retlang 摇滚!或来自 Ayende 的 Rhino Queues

      【讨论】:

        【解决方案4】:

        查看 Microsoft 的 CCR。它有一个非常高效的线程池和原语,可以直接处理许多悬而未决的异步 I/O 请求。

        在它的模型下,如果您的 I/O 是真正异步的,那么您需要的线程数就是您机器上的内核数。再多一点都是浪费。

        【讨论】:

          【解决方案5】:

          如果您有这么多任务,请考虑实施service bus 或 BizTalk 等第 3 方中间件平台。如果这太多了,那就直接Message Queuing

          此外,如果您拥有 SQL Server 并希望更轻松地备份和管理队列,请考虑使用SQL Server Service Broker

          【讨论】:

            【解决方案6】:

            我和你有同样的必要性,但我的问题以不同的方式表达,以获得非常相似的答案: Is there any way for executing a method multiple times, but managing connections/threads? (.NET)

            【讨论】:

            • 看起来很有趣,如果我能理解 LINQ 的话,我会试一试。
            【解决方案7】:

            .Net 4.0 正在添加将对此有直接支持的任务并行库。如果您不了解它,它既可以作为基于 .Net 3.5 的独立 CTP 使用,也可以作为去年秋天推出的 Visual Studio 2010 CTP 的一部分使用。这是指向team blog 的链接,其中包含更多信息和指向下载的指针。

            【讨论】:

              【解决方案8】:

              我在 CodeProject 上的这个人的 ThreadPool 上找到了一个 interesting take。它是一个实例化的 ThreadPool(因此,不是静态的和跨线程分解的),它有几个特性可以自定义性能。

              【讨论】:

                【解决方案9】:

                感谢所有回复,在浏览了其他库后,我发现它们对于我正在寻找的东西来说都过于复杂了。

                我坚持使用我自己的实现,它基本上是一个围绕 Threading.Thread() 的阻塞队列实现,它工作得很好。

                【讨论】:

                  猜你喜欢
                  • 2017-05-06
                  • 1970-01-01
                  • 2010-10-17
                  • 2019-05-10
                  • 1970-01-01
                  • 2010-12-29
                  • 1970-01-01
                  • 2012-05-04
                  • 1970-01-01
                  相关资源
                  最近更新 更多