2个版本
0.1.1 | 2020年10月15日 |
---|---|
0.1.0 | 2020年10月13日 |
#1187 in 并发
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