繁体   English   中英

BoundedChannelFullMode 是否算作额外的读者?

[英]Does BoundedChannelFullMode count as additional readers?

System.Threading.Channels中,有一个ChannelOptions.SingleReader属性,如果一次只能发出一个读取,它会选择一个优化的实现。

ChannelOptions由具有FullMode属性的BoundedChannelOptions继承。

两个FullMode值能够从 Channel 的内部存储/队列中删除项目:

BoundedChannelFullMode.DropNewest删除并忽略频道中的最新项目,以便为正在写入的项目腾出空间。

BoundedChannelFullMode.DropOldest删除并忽略通道中最旧的项目,以便为正在写入的项目腾出空间。

出于SingleReader属性的目的,在写入过程中删除最新/最旧的项目是否算作读取器?

(这不会使这两个值与SingleReader = true互斥,但这意味着当组合使用时,不仅两个读取不能相互重叠,而且读取也不能与写入重叠。)

使用SingleWriterSingleReader选项配置有界通道仅具有装饰效果。 目前(.NET 7)只有一个有界Channel<T>实现,它支持多个编写器和读取器。 此实现基于与lock同步的Deque<T> (类似于Queue<T>的内部 .NET 类型)。 您可以将SingleWriter / SingleReader选项设置为值的任意组合,这绝对没有区别。 SingleReader选项仅对无界通道有效,而SingleWriter对任何地方都没有任何影响。

那么在写入期间发生的最新/最旧项目的删除是否算作读者? 文档没有明确指定。 Channels 库的文档总体上有些缺乏。 我的意见是,它不应该算作读者。 在一个写作和阅读的角色被如此小心分离的机制中,如果一个简单的写作行为实际上是写作+阅读的混合体,那将是非常令人惊讶的。 但是由于SingleWriter / SingleReader选项对有界通道没有影响,因此目前对此的争论是学术性的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM