12 个版本
0.4.0 | 2024 年 5 月 7 日 |
---|---|
0.3.3 | 2024 年 4 月 13 日 |
0.3.1 | 2022 年 4 月 23 日 |
0.2.0 | 2022 年 4 月 20 日 |
0.1.2 | 2022 年 3 月 26 日 |
#334 in 并发
61 每月下载量
260KB
7K SLoC
stuck
Stuck 是一个基于协作式栈式协程的多线程计划任务功能。
示例
use std::time::Duration;
use stuck::channel::parallel;
use stuck::channel::prelude::*;
use stuck::{select, task, time};
#[stuck::main]
fn main() {
let (mut request_sender, request_receiver) = parallel::bounded(1);
let (mut response_sender, mut response_receiver) = parallel::bounded(1);
task::spawn(move || {
for value in request_receiver.into_iter() {
time::sleep(Duration::from_secs(1));
response_sender.send(value - 1).unwrap();
}
});
let mut tasks = vec![6, 6, 6, 6];
let mut sum = 0;
loop {
select! {
r = <-response_receiver => if let Some(n) = r {
sum += n;
},
_ = request_sender<-tasks.pop().unwrap(), if !tasks.is_empty() => if tasks.is_empty() {
request_sender.close();
},
complete => break,
}
}
println!("sum: {}", sum);
assert_eq!(sum, 20);
}
更多示例请参阅 测试。
许可证
灵感来源
依赖关系
~2–12MB
~86K SLoC