#web #channel #cycle #spsc #block #non-blocking #sender

非阻塞通道

一个专为Web设计的SPSC通道,即使在循环中也不会阻塞

1 个不稳定版本

0.1.0 2023年10月27日

#825 in WebAssembly

MIT 协议

10KB
141

非阻塞通道

crates.io docs.rs crates.io

此crate提供了一个基于ringbuf构建的SPSC通道实现,保证即使在几个循环中也不会阻塞。它还允许将发送者提升为MPSC发送者,但MPSC发送者有可能在非常短的时间内阻塞。

此crate旨在特定用于WebAssembly项目,以替换主线程上的其他通道。

当前的Rust通道实现,如std::sync::mpscflume,具有如try_recv之类的锁方法。然而,由于重新分配或其他实现细节,它们仍然有可能在几个循环中阻塞。这通常不是问题,因为具有锁时间上限的实现等价于无锁实现,但是在浏览器中运行WebAssembly稍微严格一些 - 主线程不允许调用atomic.wait 任何,即使等待只持续几个循环。

依赖关系

~240KB