7 个版本 (4 个重大变更)
0.5.0 | 2024年5月9日 |
---|---|
0.4.0 | 2023年8月23日 |
0.3.0 | 2023年8月21日 |
0.2.0 | 2023年2月10日 |
0.1.1 | 2022年3月25日 |
#142 在 并发 中排名
每月 1,104 次下载
60KB
1.5K SLoC
STM
async-stm
是软件事务内存的一个实现。它最初受到 rust-stm 的启发,但采取了一些不同的方法,更符合传统风格。
以下是对其进行了以下扩展:
- 使
atomically
异步,因此 STM 操作可以与tokio
一起使用,而不会阻塞整个线程。 - 添加了用错误
abort
事务的功能,调用者必须处理。 - 事务通过线程局部变量传递,以简化
TVar
API。 - 读取
TVar
返回一个Arc
,因此克隆可以延迟到我们需要修改结果时。 - 添加了将辅助事务一起提交或回滚 STM 事务的选项,该辅助事务在检测到一些冲突时也可以导致重试。这是一种混合持久 STM 解决方案的可能性。
- 添加了一些基于 Simon Marlow 的书籍《Haskell 并行和并发编程》的基于队列的选项实现。
请查看 测试 以了解示例用法。
先决条件
安装以下内容以构建项目
curl https://sh.rustup.rs -sSf | sh
rustup toolchain install nightly
rustup default stable
rustup update
基准测试
包含基准测试,以帮助比较不同队列实现的权衡。
cargo +nightly bench "bench" --all-features
更多信息
- https://www.microsoft.com/en-us/research/publication/beautiful-concurrency/
- https://bartoszmilewski.com/2010/09/11/beyond-locks-software-transactional-memory/
许可证
本项目采用 MIT 许可证。
依赖项
~2.4–9MB
~58K SLoC