1 个不稳定版本
0.1.0 | 2023年9月22日 |
---|
927 在 并发 中
59KB
1K SLoC
todc-mem
共享内存分布式系统的算法。
限制
在共享内存分布式系统中,许多理论研究都依赖于无限或至少规模可观的 原子 内存的存在。尽管现代硬件确实提供了访问少量 顺序一致 内存的方法,通常最多64位,但这很少足以满足大多数论文中提出的假设。
因此,虽然这个crate中的算法已经尽可能地编写得正确和可用,但它们仍然缺少一些期望的特性,可能几乎没有 实际 价值。
示例
使用 快照对象 来获得一组线程所进行的进度的一致视图。
use std::sync::Arc;
use std::thread;
use todc_mem::snapshot::{Snapshot, BoundedAtomicSnapshot};
const N: usize = 6;
let snapshot: Arc<BoundedAtomicSnapshot<N>> = Arc::new(BoundedAtomicSnapshot::new());
// Does some work, and returns what percent of the total
// amount of work has been completed.
fn do_work(i: usize) -> Option<u8> {
// -- snipped --
}
// Each worker thread does some work and periodically updates
// its component of the snapshot with the amount of progress
// it has made so far.
let mut workers = Vec::new();
for i in 1..N {
let mut snapshot = snapshot.clone();
workers.push(thread::spawn(move || {
while let Some(percent_complete) = do_work(i) {
snapshot.update(i, percent_complete);
}
}));
}
// The main thread waits until all workers have completed
// at least half of their work, before printing a message.
snapshot.update(0, 100);
loop {
let view = snapshot.scan(0);
if view.iter().all(|&p| p >= 50) {
println!("We're at-least half-way done!");
break;
}
}
开发
一些测试使用了 shuttle 进行 随机并发测试。要运行需要此功能的测试,请
cargo test --features shuttle --test MODULE --release
依赖项
~0.4–26MB
~330K SLoC