#广播通道 #通道 #广播 #mpmc #no-std

no-std blinkcast

快速、有界、多生产者、多消费者、丢包的广播通道

3 个不稳定版本

0.2.0 2024年2月22日
0.1.1 2024年2月22日
0.1.0 2024年2月21日

#569 in 并发

Download history 102/week @ 2024-03-29 22/week @ 2024-04-05 17/week @ 2024-04-12 17/week @ 2024-05-10 1/week @ 2024-05-17 40/week @ 2024-05-24 6/week @ 2024-05-31 2/week @ 2024-06-07 1/week @ 2024-06-28 48/week @ 2024-07-05 52/week @ 2024-07-12

每月下载量 101 次

MIT 许可证

44KB
753

blinkcast

check codecov Crates.io blinkcast docs.rs blinkcast

快速、有界、丢包的 Rust 广播通道,支持 no_std 目标。

有时如果缓冲区中的单个元素在读写操作上发生竞争,它可能会稍微占用 CPU。对于小型缓冲区,这种情况可能会更常见。

这是通过环形缓冲区和原子操作实现的,它可以被认为是无锁的,因为我们没有使用 Lock 原语,但实现可能会等待竞争的写入者/读者完成对特定节点的访问。这种情况很少发生,但我可能不会在严格意义上称其为 lock-free

blinkcast 的 API 与 std::sync::mpsc 通道类似。然而,也有一些不同之处

  • 它允许多个消费者(接收者)和多个生产者(发送者)。
  • 通道向每个消费者广播每个发送。
  • 丢包,发送者将覆盖旧数据,因此接收者必须快速,否则他们会丢失旧数据(不要眨眼)。
  • no_std 环境实现。

由于这种性质,它在数据非常快且新数据始终比旧数据更重要,旧数据可以被丢弃的应用程序中很有用。例如,在实现音频驱动程序时,一个小错误但保持最新比延迟音频更好。

请参阅文档中的示例。

最小支持的 Rust 版本 (MSRV)

此 crate 的最小支持的 Rust 版本是 1.61.0

许可证

许可协议为 MIT (LICENSEhttp://opensource.org/licenses/MIT)

依赖项

~0–25MB
~331K SLoC