3 个不稳定版本
0.2.0 | 2024年2月22日 |
---|---|
0.1.1 | 2024年2月22日 |
0.1.0 | 2024年2月21日 |
#569 in 并发
每月下载量 101 次
44KB
753 行
blinkcast
快速、有界、丢包的 Rust 广播通道,支持 no_std
目标。
有时如果缓冲区中的单个元素在读写操作上发生竞争,它可能会稍微占用 CPU。对于小型缓冲区,这种情况可能会更常见。
这是通过环形缓冲区和原子操作实现的,它可以被认为是无锁的,因为我们没有使用 Lock
原语,但实现可能会等待竞争的写入者/读者完成对特定节点的访问。这种情况很少发生,但我可能不会在严格意义上称其为 lock-free
。
blinkcast
的 API 与 std::sync::mpsc
通道类似。然而,也有一些不同之处
- 它允许多个消费者(接收者)和多个生产者(发送者)。
- 通道向每个消费者广播每个发送。
- 丢包,发送者将覆盖旧数据,因此接收者必须快速,否则他们会丢失旧数据(不要眨眼)。
- 为
no_std
环境实现。
由于这种性质,它在数据非常快且新数据始终比旧数据更重要,旧数据可以被丢弃的应用程序中很有用。例如,在实现音频驱动程序时,一个小错误但保持最新比延迟音频更好。
请参阅文档中的示例。
最小支持的 Rust 版本 (MSRV)
此 crate 的最小支持的 Rust 版本是 1.61.0
许可证
许可协议为 MIT
(LICENSE 或 http://opensource.org/licenses/MIT)
依赖项
~0–25MB
~331K SLoC