我有一个项目需要大量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。