【问题标题】:What is the fastest producer consumer method in c# [closed]c#中最快的生产者消费者方法是什么[关闭]
【发布时间】:2023-03-31 09:23:01
【问题描述】:

我正在尝试实现一个侦听某些消息的队列线程。最快的方法是什么,这是单进程多线程应用程序。 我应该使用 Apache Qpid 吗?还是只是一个普通的 .NET 阻塞队列类(如http://www.eggheadcafe.com/articles/20060414.asp)? 我很高兴听到您在这件事上的经验。

【问题讨论】:

    标签: c# multithreading message-queue


    【解决方案1】:

    我会避免使用任何使用 Thread.Sleep() 的代码。在 .NET 4.0 广泛可用之前,请考虑使用 Joe Duffy 的 BlockingQueue class.

    【讨论】:

    • 为什么我应该考虑避免使用 Thread.Sleep() 直到 .net 4.0 出来?
    • 您要求“最快”。休眠一百毫秒的线程永远不会很快。
    • 好的,但是为什么要在 .net 4.0 之前避免使用 Thread.Sleep()? .net 4.0 有什么特别之处,我可以在 .net 4 中使用 thread.sleep()?
    • 不是我的意思。 .NET 4.0 将内置 ConcurrentQueue 类。您想避免使用 Thread.Sleep() 的代码,因为这些代码在睡眠时没有做任何有用的事情。这是慢代码。
    【解决方案2】:

    您需要队列持久化吗?换句话说,如果进程由于某种原因死掉了,你还需要能够继续吗?如果是这样,那会使事情变得非常复杂。如果没有,我会使用常规阻塞队列 - 如果您能够使用 .NET 4.0,请使用 new concurrent collections。这让这一切变得非常容易。

    请注意,我的文章中给出的 SwDevMan81 引用的示例是一个非常简单的示例,并且它早于泛型。对于更高质量的实现,您需要一种停止队列、泛型、异常处理等的好方法。我的实现是一个合理的起点,但不应将其视为最终产品。

    【讨论】:

    • 谢谢。无需队列持久化。
    【解决方案3】:

    查看 John Skeet's生产者消费者示例

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多