#lock-free #atomic #bag #safe-wrapper

orx-pinned-concurrent-col

一个核心数据结构,专注于通过使用 PinnedVec 作为底层存储来实现高性能、可能无锁的并发集合。

13 个稳定版本

新版本 2.4.0 2024 年 8 月 22 日
2.3.0 2024 年 8 月 12 日
2.2.0 2024 年 7 月 25 日
1.6.1 2024 年 7 月 8 日
1.1.0 2024 年 4 月 12 日

#1043并发

Download history 89/week @ 2024-05-03 75/week @ 2024-05-10 24/week @ 2024-05-17 16/week @ 2024-05-24 240/week @ 2024-05-31 23/week @ 2024-06-07 221/week @ 2024-06-14 26/week @ 2024-06-21 203/week @ 2024-06-28 231/week @ 2024-07-05 68/week @ 2024-07-12 453/week @ 2024-07-19 713/week @ 2024-07-26 799/week @ 2024-08-02 360/week @ 2024-08-09 135/week @ 2024-08-16

2,177 每月下载量
5 crates 中使用

MIT 许可证

46KB
513

orx-pinned-concurrent-col

orx-pinned-concurrent-col crate orx-pinned-concurrent-col documentation

一个核心数据结构,专注于通过使用 PinnedVec 作为底层存储来实现高性能、可能无锁的并发集合。

PinnedVec 在增长的同时,将已推入的元素固定在其内存位置。这允许以下并发模型。

  • 向集合写入不会阻塞。可以并发地发生多个写入。
    • 然而,PinnedConcurrentCol 本身不提供无竞态写入的保证;因此,写入方法被标记为 unsafe
    • 确保在写入同一位置时的多个写入或读取不会并发发生是包装器的责任。
  • 一次只能发生一个增长(容量扩展)。
    • 如果底层集合达到其容量并需要增长,只有一个线程负责扩展向量。
  • 增长不会阻塞。
    • 写入已在其容量内的位置的写入不会因为增长而阻塞。
    • 写入待分配位置的写入只需等待分配完成;不需要任何其他任务。

从属性中可以看出,固定并发集合旨在实现高性能。它公开了可以根据不同需求以不同方式使用的有用方法,并标记可能导致竞态条件的方法为 unsafe,说明了底层原因。这使构建安全的包装器(如 ConcurrentBagConcurrentOrderedBagConcurrentVec)成为可能。

贡献

欢迎贡献!如果您发现错误,有任何疑问或认为某些地方可以改进,请打开一个问题或创建一个PR。

许可证

此库采用MIT许可证。详情请参阅LICENSE。

依赖项

~415KB