Rust in Everything
基于 crossbeam-utils 0.8.23

crossbeam-utils

crossbeam-utils 是工作区里唯一不依赖其他 crossbeam crate 的一个,src/ 下 4168 行(含文档和文件内测试)。其他五个 crate 都依赖它,用得最多的是前两样:

章类型谁在用本章的实验
CachePadded把值对齐到一条缓存行channel、deque、epoch、queue、skiplist 的头尾指针和纪元;tokio、rayon 也用(或抄了一份)E1:伪共享距离扫描
Backoff自旋 → 让出 → 「该睡了」channel、deque、queue、AtomicCell 的锁E9:每一步的耗时
AtomicCell任意 T 的原子单元,放不进原生原子就用全局 seqlockchannel 的 tickE2:lock-free 类型表、锁竞争
Parker 与 WaitGroup和线程解耦的 park 令牌;计数到零WaitGroup 给作用域线程用—
ShardedLock8 分片读写锁无内部用户E10:扫写比例
thread::scope 与 std 的 scope作用域线程门面 crossbeam::scopeE12:子线程 panic
flowchart TB
  cp[CachePadded] --> ac[AtomicCell 的 67 把锁]
  cp --> sl[ShardedLock 的 8 个分片]
  bo[Backoff] --> ac
  wg[WaitGroup] --> sc[thread::scope]
  cp --> others["channel / deque / epoch / queue"]
  bo --> others

cfg(crossbeam_loom) 下,AtomicCell、ShardedLock 和 thread 模块不编译,Backoff、Parker、WaitGroup 换成 loom 的原语(怎么验证并发代码)。no_std 下只剩 CachePadded、Backoff(snooze 不让出)、AtomicCell 和 AtomicConsume。

AtomicConsume(load_consume)不单独成章,放在 本库里的内存序 里讲。

💬 关联讨论

发起讨论
加载中...