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 |
|
#153 在 并发
180KB
2K SLoC
Omango
这是一个并发集合。
-
支持无锁 SPSC 和 MPMC 队列(有界和无界)。队列简单、轻量、快速且在多线程环境中安全。比 std::mpsc::sync_channel 和其他开源的有界队列( ringbuf、rtrb、flume、crossbeam-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 八核上进行。
许可证
该crate遵循MIT许可协议。更多信息请参阅LICENSE。
参考
依赖项
~0.4–11MB
~53K SLoC