4 个版本

0.2.5 2024年4月21日
0.2.4 2024年4月20日
0.2.2 2024年3月28日
0.1.4 2022年7月13日
0.1.3 2022年5月29日

#153并发

MIT 许可证

180KB
2K SLoC

Pngtree-omango-in-flat-style-omango-3626110


Rust License: MIT Release Cargo Rust 1.49+


Omango

这是一个并发集合。

  • 支持无锁 SPSC 和 MPMC 队列(有界和无界)。队列简单、轻量、快速且在多线程环境中安全。比 std::mpsc::sync_channel 和其他开源的有界队列( ringbufrtrbflumecrossbeam-channel )更快。

  • 支持 Golang WaitGroup 等待一组线程完成。

  • 支持 Single Flight 多路复用具有相同工作的线程,只有一个代表线程将运行并为所有等待线程返回响应。

  • 支持 Single Source 提供从多个来源合成响应的机制。

目录

简介

SPSC 和 MPMC 队列都是基于 Dmitry Vyukov 的伪代码实现的。实现方式完全相同。但它们之间在等待-重试和阻塞方面仍有一些差异。

MPMC 是高争用多线程环境。如果重试是连续且立即的,CPU 缓存一致性将迅速增加并降低性能。因此,我们必须等待然后重试。然而,在 SPSC 这种低争用多线程环境(仅 2 个线程)中,这种做法并不合适。在 SPSC 中,立即重试仍然可以保证性能。

SPSC 和 MPMC 队列都可以用作通道。

与版本 0.1.* 比较

  • 性能更好。

  • 支持无界队列(SPSC + MPMC)。

  • 可以使用 recv 在队列关闭时获取剩余项。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
omango = "0.2.5"

兼容性

最低支持的 Rust 版本是 1.57

基准测试

测试是在运行 Windows 11 的英特尔酷睿 I7 四核和运行 macOS BigSur 11.3 的 M1 八核上进行。

Omango benchmarks SPSC

Omango benchmarks MPSC

Omango benchmarks MPMC

Omango benchmarks Unbounded

许可证

该crate遵循MIT许可协议。更多信息请参阅LICENSE

参考

依赖项

~0.4–11MB
~53K SLoC