#thread #generator #green #parallel #synchronization-primitive #green-threads

bin+lib greenie

稳定 Rust 中的绿色线程和协程

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

MIT 许可证

59KB
1.5K SLoC

greenie

Rust 编程语言中的简单绿色线程。

特性

  • 稳定 Rust 中的生成器!
  • 同步原语:MutexCondvar 等其他将在以后实现(见 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