我有一个项目,需要大量的IO绑定线程(可能有数百个),这使得tokio运行时比标准线程更理想。但是,我还需要同时阻止发送者和接收者的会合通道。std::sync::mpsc具有sync_channel(0),但tokio::sync::mpsc中没有对等项。channel(0)将死机。我如何将这两个功能结合起来?标准通道是否仍然有效?
tokio
std::sync::mpsc
sync_channel(0)
tokio::sync::mpsc
channel(0)
t98cgbkg1#
标准库通道是不可等待的,所以它们会阻塞执行程序。作为一个快速的解决方案,你可以将通道操作 Package 在tokio::task::spawn_blocking()中,即用spawn_blocking(|| tx.send(message)).await替换tx.send(message)。更好的选择是使用支持异步集合通道的库,如flume。
tokio::task::spawn_blocking()
spawn_blocking(|| tx.send(message)).await
tx.send(message)
1条答案
按热度按时间t98cgbkg1#
标准库通道是不可等待的,所以它们会阻塞执行程序。作为一个快速的解决方案,你可以将通道操作 Package 在
tokio::task::spawn_blocking()
中,即用spawn_blocking(|| tx.send(message)).await
替换tx.send(message)
。更好的选择是使用支持异步集合通道的库,如flume。