Channel<T> 是否支持多个 ChannelReader 和 ChannelWriters,或者每个只支持一个?
Does Channel<T> support multiple ChannelReaders and ChannelWriters, or only one of each?
Channel.CreateUnbounded 的文档说:
Creates an unbounded channel usable by any number of readers and
writers concurrently.
但是 Channel 仅具有单个 ChannelReader
和 ChannelWriter
的属性,而且似乎没有办法明确地围绕一个 reader/writer 创建一个 reader/writer现有频道。
我认为如果您有多个 producers/consumers,它们应该共享 writer/reader 的同一个实例,这是不正确的吗? "number of readers/writers" 是在谈论并发访问而不是 class 个实例的数量吗?
是的,文档意味着多个生产者(作者)和消费者(读者)。允许所有生产者使用频道的单ChannelWriter
,允许所有消费者使用其单ChannelReader
。不需要外部同步。 Channel<T>
class 是 100% 线程安全的。
重要提示:在多个消费者的情况下,通过通道传递的每个项目只会被一个消费者接收。 Channel<T>
不支持将一个元素传播给多个消费者,例如 BroadcastBlock<T>
数据流块。
Channel.CreateUnbounded 的文档说:
Creates an unbounded channel usable by any number of readers and writers concurrently.
但是 Channel 仅具有单个 ChannelReader
和 ChannelWriter
的属性,而且似乎没有办法明确地围绕一个 reader/writer 创建一个 reader/writer现有频道。
我认为如果您有多个 producers/consumers,它们应该共享 writer/reader 的同一个实例,这是不正确的吗? "number of readers/writers" 是在谈论并发访问而不是 class 个实例的数量吗?
是的,文档意味着多个生产者(作者)和消费者(读者)。允许所有生产者使用频道的单ChannelWriter
,允许所有消费者使用其单ChannelReader
。不需要外部同步。 Channel<T>
class 是 100% 线程安全的。
重要提示:在多个消费者的情况下,通过通道传递的每个项目只会被一个消费者接收。 Channel<T>
不支持将一个元素传播给多个消费者,例如 BroadcastBlock<T>
数据流块。