1 个不稳定版本
0.1.0-preview | 2019年2月25日 |
---|
#9 in #stm
185KB
5K SLoC
swym
swym 是一个实验性的 STM,可用于实现性能接近无锁数据结构的并发数据结构。
有关更多信息,请参阅文档。
初始 基准测试 可以在这里找到这里。
lib.rs
:
一个低级别的交易内存库。
swym
是一个实验性的 STM,可用于实现性能接近无锁数据结构的并发数据结构。
示例
获取 swym 的线程局部状态的句柄
use swym::thread_key;
let thread_key = thread_key::get();
创建新的交易内存单元
use swym::tcell::TCell;
static A: TCell<i32> = TCell::new(0);
let b = TCell::new(42);
执行交易以交换两个值
thread_key.rw(|tx| {
let temp = A.get(tx, Default::default())?;
A.set(tx, b.get(tx, Default::default())?)?;
b.set(tx, temp)?;
Ok(())
});
功能
- 在每次交易期间表现得像一个全局锁被持有。这可以通过使用
Ordering::Read
对加载进行一些放松。 - 针对读取为主的数据结构和现代缓存进行了高度优化。
TCell
将所有数据都内联存储。只读交易不修改任何全局状态,而读写交易仅在提交时修改全局状态。 - swym 每次交易施加的分配数量应该平均为0,通过重用读取日志/写入日志/垃圾袋来实现。
- 通过
TPtr
构建递归数据结构的功能仍然是实验性的,但看起来很有希望 - 请参阅 GitHub 上的示例。 - 由自定义基于时代的回收风格垃圾回收器支持(那里还有很多优化工作要做)。
- 计划支持嵌套交易,但尚未实现。