#yield #points #generator #green #insert #thread #greenie

greenie-proc

将 yield 点插入您的代码

2 个不稳定版本

0.2.0 2020年1月10日
0.1.0 2020年1月7日

#25#green


用于 greenie

MIT 许可协议

5KB
91

greenie

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

特性

  • 稳定 Rust 中的生成器!
  • 同步原语:MutexCondvar,其他将在以后实现(参见 TODO)。
  • 快速。
  • 使用 greenify 宏进行半自动调度,该宏在您的函数中插入 yield 点。

TODO

  • 抢占式调度。
  • 实现 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.send("ping");
            println!("{}", chan_2.recv().unwrap());
            chan_1.send("ping");
            println!("{}", chan_2.recv().unwrap());
            chan_1.send("ping");
            println!("{}", chan_2.recv().unwrap());
        },
        (chan_1.clone(), chan_2.clone()),
    );
    let fpong = Fiber::new_capture(
        |chan_1, chan_2| {
            chan_2.send("pong");
            println!("{}", chan_1.recv().unwrap());
            chan_2.send("pong");
            println!("{}", chan_1.recv().unwrap());
            chan_2.send("pong");
            println!("{}", chan_1.recv().unwrap());
        },
        (chan_1.clone(), chan_2.clone()),
    );

    fpong.start().unwrap();
    fping.start().unwrap();
}

更多示例,请参阅 文档examples/

依赖项

~1.5MB
~35K SLoC