C# 线程间队列策略,有利于多个写入程序和单个读取器

C# 线程间队列策略,有利于多个写入程序和单个读取器,c#,multithreading,queue,locking,C#,Multithreading,Queue,Locking,我所做的大多数阅读表明,各种“无锁”并发结构(例如ReaderWriterLockSlim with queue、BlockingCollection/ConcurrentQueue)的设计(或实现)有利于读者 是否有1)有利于编写器和2)最小化编写器上下文切换的队列策略/实现 惩罚读取器或减少排队消息的总顺序是可以的。也就是说,应该维护从每个写入程序排队的项目顺序,但不需要与所有写入程序一致 我曾考虑过使用不同的每写入者队列(或为不同写入者的不同集合提供服务的多个队列),但似乎这种特殊情况将有

我所做的大多数阅读表明,各种“无锁”并发结构(例如ReaderWriterLockSlim with queue、BlockingCollection/ConcurrentQueue)的设计(或实现)有利于读者

是否有1)有利于编写器和2)最小化编写器上下文切换的队列策略/实现

惩罚读取器或减少排队消息的总顺序是可以的。也就是说,应该维护从每个写入程序排队的项目顺序,但不需要与所有写入程序一致


我曾考虑过使用不同的每写入者队列(或为不同写入者的不同集合提供服务的多个队列),但似乎这种特殊情况将有一些重点/支持和一个通用实现。有很多作家。

对我来说,这是一个特殊的案例,因此不会有任何框架实现(据我所知)。谈到
阻塞收集
(默认情况下使用
ConcurrentQueue
)是经典的
生产者-消费者
问题的一般框架实现,其中,如果队列已满,它将阻塞生产者线程,如果队列为空,则阻塞消费者线程


但不确定,您的具体情况是什么,以及为什么您喜欢编写线程而不是阅读线程

对我来说,这似乎是一个特定的案例,因此不会出现任何框架实现(根据我所知)。谈到
阻塞收集
(默认情况下使用
ConcurrentQueue
)是经典的
生产者-消费者
问题的一般框架实现,其中,如果队列已满,它将阻塞生产者线程,如果队列为空,则阻塞消费者线程


但不确定,您的具体情况是什么,以及为什么您喜欢编写线程而不是阅读线程

多个ConcurrentQueue输入@ScottChamberlain Aha怎么样!我只是在寻找这样一种方法。这将是使用多个编写器队列的[简单]方法。似乎Wn/1(编剧/消费者)和1/Cn一样普遍,许多东西似乎“更适合”1/Cn。。也许事实并非如此。多个ConcurrentQueue输入@ScottChamberlain Aha怎么样!我只是在寻找这样一种方法。这将是使用多个编写器队列的[简单]方法。似乎Wn/1(编剧/消费者)和1/Cn一样普遍,许多东西似乎“更适合”1/Cn。。或者可能根本不是这样。场景:[许多]作者希望发送日志记录/统计/诊断指标。他们通过将原始数据发送到聚合器来实现这一点,聚合器将悠闲地保存信息。这种数据流出不应“阻止”或“窃取”实际发生的操作的工作。场景:[许多]编写者希望发送日志记录/统计/诊断度量。他们通过将原始数据发送到聚合器来实现这一点,聚合器将悠闲地保存信息。这种数据流出不应“阻止”或“窃取”实际发生的操作。