1个不稳定版本

0.0.1 2021年1月25日

#40 in #down


work-queue中使用

Apache-2.0 OR MIT OR Zlib

20KB
458

cobb

Cobb 是经典冒险游戏《LOOM》中的一个配角,也在《猴岛的秘密》中戴着“问我关于LOOM”的按钮出现...(啊,抱歉,搞错了...)

Cobb 是一个Rust工具,帮助你追踪并发算法中的错误。

Cobb 类似于 loom,并且甚至受到了它的启发。它希望在某些LOOM目前缺乏(线程过多、速度过慢、不支持的运算等)情况下表现良好,但总体上是一种更简单的方法。通常,你必须在运行cobb的同时使用线程清理器、miri的竞争检测器或在不按序的硬件上运行来捕获许多类型的错误。

尽管如此,如果你的代码错误足够多,它甚至可以在x86上捕获问题。

Cobb 非常是一个正在进行中的项目,相当混乱,但我现在正在将其上线,以便在其他地方进行链接。

使用方法

Cobb 在类似于arm的不按序硬件上的尝试更为成功。如果你没有arm机器并且无法获得,那么请确保你的代码在x86上也是错误的,否则Cobb将无法工作。

与LOOM的比较

相比LOOM的优点

  1. Cobb 简单、易懂。(理论上是这样,目前的代码有点混乱,但只有几百行,所以并不算太糟糕)。
  2. Cobb 的开销比LOOM低得多。Cobb 可以运行更复杂的测试,利用更多的线程。
  3. 更精确的硬件重排序模型,因为我们实际上只是让硬件进行重排序。
  4. 在LOOM中,原子操作带有隐式的SeqCst屏障,这意味着许多错误无法找到。

相比LOOM的缺点

  1. 对运行时环境的依赖性更大。例如,最佳运行环境是不按序机器,线程数少于核心数。
  2. 如果没有运行竞争检测器,你需要自己检测是否真的发生了错误(大多数情况下)。
  3. LOOM包含一些在运行前重新初始化的替代品,如lazy_static。
  4. LOOM的API目前要好得多

与LOOM的对比

  • 在LOOM上,你对何时何地创建线程有更多的控制权。Cobb 只是从不同的线程调用你的函数。

无运行时依赖