5 个版本 (3 个破坏性更新)
0.4.0 | 2020 年 1 月 11 日 |
---|---|
0.3.0 | 2020 年 1 月 10 日 |
0.2.0 | 2020 年 1 月 8 日 |
0.1.2 | 2020 年 1 月 7 日 |
0.1.1 | 2020 年 1 月 7 日 |
#665 在 并发 中
每月下载量 28
59KB
1.5K SLoC
greenie
Rust 编程语言中的简单绿色线程。
特性
- 稳定 Rust 中的生成器!
- 同步原语:
Mutex
,Condvar
等其他将在以后实现(见 TODO)。 - 快速。
- 使用
greenify
宏进行半自动调度,该宏在您的函数中插入 yield 点。
TODO
- 抢占式调度
- 实现 FIFO 调度算法
- 实现
RwLock
。 - 未来
示例
Condvar 和 Mutex 示例
use greenie::channel::*;
use greenie::{greeny_main, Fiber};
#[greeny_main]
fn main() {
let chan_1 = Channel::<&'static str>::new(2);
let chan_2 = Channel::<&'static str>::new(2);
let fping = Fiber::new_capture(
|chan_1, chan_2| {
chan_1.push("ping");
println!("{}", chan_2.pop().unwrap());
chan_1.push("ping");
println!("{}", chan_2.pop().unwrap());
chan_1.push("ping");
println!("{}", chan_2.pop().unwrap());
},
(chan_1.clone(), chan_2.clone()),
);
let fpong = Fiber::new_capture(
|chan_1, chan_2| {
chan_2.push("pong");
println!("{}", chan_1.pop().unwrap());
chan_2.push("pong");
println!("{}", chan_1.pop().unwrap());
chan_2.push("pong");
println!("{}", chan_1.pop().unwrap());
},
(chan_1.clone(), chan_2.clone()),
);
fpong.start().unwrap();
fping.start().unwrap();
}
更多示例请参阅 文档 或 examples/
依赖项
~4MB
~77K SLoC