8个版本
0.1.9 | 2023年5月6日 |
---|---|
0.1.8 | 2023年1月6日 |
0.1.7 | 2022年3月21日 |
0.1.6 | 2020年8月27日 |
0.1.3 | 2018年4月30日 |
#153 in 缓存
138 每月下载次数
在 apis 中使用
46KB
1.5K SLoC
unbounded_spsc
bounded_spsc_queue
的 "无界" 扩展。
该软件包提供了一个无界SPSC队列,具有异步发送功能,使用 bounded_spsc_queue
作为内部队列。这比标准库中使用的链表队列提供了更好的性能和缓存一致性。
除了有界,bounded_spsc_queue
本身只提供自旋等待以阻塞 recv
(缓冲区为空时阻塞),因此这里对标准库中找到的阻塞等待代码进行了适配,以提供更友好的CPU阻塞机制,包括带超时和不带超时。
请注意,bounded_spsc_queue
不支持零大小消息类型(如单元类型 ()
),并且会因未指定的错误而崩溃;这里我们检查零大小并使用 panic!
和错误消息进行恐慌。
发送始终是异步的;如果底层缓冲区已满,则创建一个大小为前一个缓冲区两倍的新缓冲区,并通过标准的异步 mpsc
通道将其发送给消费者。目前没有机制可以指定初始容量(硬编码为128)或缩小。
这里不提供同步发送(缓冲区满时阻塞):为此,请使用 bounded_spsc_queue
直接(自旋等待)或标准 std::sync::mpsc::sync_channel
(阻塞等待;内部使用基于向量的缓冲区)。
还从标准库中提取了(不稳定)的
依赖项
~255KB