我有一个项目需要大量 IO 绑定线程(可能数百个),这使得tokio
运行时比标准线程更理想。
但是,我还需要同时阻止发送方和接收方的会合通道。
std::sync::mpsc
有sync_channel(0)
,但在 中没有等价物tokio::sync::mpsc
。channel(0)
会恐慌。
我怎样才能把这两件事结合起来?标准频道还能用吗?
我有一个项目需要大量 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。