#sharing #job #task

mula

与各种请求者共享昂贵的计算

2个版本

0.1.1 2020年10月15日
0.1.0 2020年10月13日

#1187 in 并发

MIT许可证

14KB
153

mula

Mula提供了一种方式,可以在不重复实际计算的情况下,为给定计算的服务请求提供服务。

想象一下,你有一个REST API,其中一个端点会引发昂贵的计算。如果在第一个计算进行时该端点收到了更多请求,那么如果可以简单地让这些新请求排队等待计算结束,并给它们相同的计算结果,那就很好了。

这正是Mula允许你做的。

示例

以下示例将只运行计算闭包两次,一次用于每个不同的输入。对于"burro"的两个订阅都将由相同的计算提供服务。

use mula::mula;

#[mula]
fn delayed_uppercase(input: &'static str) -> String {
    std::thread::sleep(std::time::Duration::from_secs(2));
    input.to_uppercase()
}

let thread1 = std::thread::spawn(move || {
    let upper = delayed_uppercase("mula");
    assert_eq!(upper, "MULA".to_string());
});

let thread2 = std::thread::spawn(move || {
    let upper = delayed_uppercase("burro");
    assert_eq!(upper, "BURRO".to_string());
});

let thread3 = std::thread::spawn(move || {
    let upper = delayed_uppercase("burro");
    assert_eq!(upper, "BURRO".to_string());
});

thread1.join();
thread2.join();
thread3.join();

许可证:MIT

依赖项

~1.7–2.3MB
~48K SLoC