如何在 `tokio` 中获得等同于 sync_channel(0) 的值?
How can I get an equivalent to sync_channel(0) in `tokio`?
我有一个项目需要大量 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。
我有一个项目需要大量 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。