【发布时间】:2021-11-26 10:58:46
【问题描述】:
我有一个项目需要大量 IO 绑定线程(可能数百个),这使得 tokio 运行时比标准线程更理想。
但是,我还需要同时阻止发送方和接收方的集合通道。
std::sync::mpsc 有 sync_channel(0),但在 tokio::sync::mpsc 中没有等价物。 channel(0) 会恐慌。
如何将这两件事结合起来?标准频道还能用吗?
【问题讨论】:
-
标准频道不等待,所以他们会阻止执行者。作为一种解决方法,您可以将频道操作包装在
tokio::task::spawn_blocking中,即将tx.send(message)替换为spawn_blocking(|| tx.send(message)).await。 -
你可以试试flume,它声称支持集合和异步通道。
-
您在寻找
Barrier吗?您的问题不清楚 -
@Stargateur 障碍是您需要等待每个人达成共识的时候。它要求您知道对等点的数量,并且它不携带有效负载。集合通道只是一个不执行任何缓冲的有界通道。
-
@user4815162342 无论如何看起来都不是一件好事
标签: rust synchronization channels tokio