#分布式系统 #共享内存 #原子快照

todc-mem

共享内存分布式系统算法

1 个不稳定版本

0.1.0 2023年9月22日

927并发

MIT 许可证

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