3个版本
0.4.3 | 2022年6月27日 |
---|---|
0.4.2 | 2022年6月3日 |
0.4.0 | 2022年6月1日 |
#734 在 并发 中
50KB
1K SLoC
Stronghold Read-Log-Update 并发同步
此crate提供了一个提交时锁定软件事务内存(STM)的实现。实现中使用了 todoBoxedMemory
进行所有相关内存分配,其中涉及敏感数据。因此,敏感数据在明文内存中的暴露时间被减少到最小,使得STM成为并行环境中的理想框架。
概述
动机
Stronghold使用actix作为actor框架来管理底层系统内的并发操作。虽然actor系统不是一个糟糕的选择,因为它抽象了复杂的同步机制,但actix明确地拥有底层的执行器框架,这反过来使得在共享环境中集成Stronghold变得困难。此外,actix在一个单线程的事件循环上运行,这使得线程级别的actor隔离变得过时。
与actor系统的优势
在基于STM(软件事务内存)的系统里,所有具有可变状态的对象都是事务性的,对对象的操作都透明地使用底层系统。这允许在运行时将受保护的内存与暴露的内存隔离开来。事务总是安全的;内部冲突会自动回滚并重试,直到事务成功。对可变内存的操作是可组合的。由于只有写操作实际上会改变对象,因此必须将此操作通知其他线程。最近的研究描述了多种方法,我们认为阻塞/重试其他事务是最可行的方法,以确保数据一致性。如果事务已经完成,并且所有读取操作都经过验证,则将产生的工作提交给实际对象。其他线程在操作同一对象时,永远不会看到对该对象所做的更改。这里描述的STM使用了一种懒回滚事务的方法。STM也可以描述为一种乐观锁定方法:在发生冲突之前,对内存的操作被认为是安全的,事务可以安全地回滚并重试。
集成
(文本内容在此处)
概述
(文本内容在此处)
功能
[x] - 多个并发读写 [x] - 无锁集成 [x] - (可选)集成了受保护内存处理
开放性问题/待办事项
- 受功能门控的安全内存
- RLU(运行时上下文)是全局上下文,必须可以从许多线程以可变方式访问,因为可以随时生成新上下文
- 检查try_lock是否需要为日志返回完整副本,或者是否需要延迟更改
依赖项
~0.5–1MB
~21K SLoC