#thread #fiber #green

nightly coroutine

Rust 的协程库

14 个不稳定版本 (6 个破坏性版本)

使用旧的 Rust 2015

0.8.0 2017年3月24日
0.7.1 2017年3月21日
0.6.0 2016年7月29日
0.5.0 2016年3月26日
0.1.2 2015年4月19日

#458 in 并发

每月38次下载
2 crates 中使用

MIT/Apache

75KB
2K SLoC

coroutine-rs

Build Status crates.io crates.io

Rust 的协程库

[dependencies.coroutine]
git = "0.5.0"

用法

协程的基本用法

extern crate coroutine;

use std::usize;
use coroutine::asymmetric::Coroutine;

fn main() {
    let coro: Coroutine<i32> = Coroutine::spawn(|me,_| {
        for num in 0..10 {
            me.yield_with(num);
        }
        usize::MAX
    });

    for num in coro {
        println!("{}", num.unwrap());
    }
}

此程序将以下内容打印到控制台

0
1
2
3
4
5
6
7
8
9
18446744073709551615

更多详情,请运行 cargo doc --open

目标

  • 基本的单线程协程支持

  • 非对称协程

  • 对称协程

  • 线程安全:一次只能在一个线程中恢复一个协程

注意

  • 由于某些不稳定特性,目前这个crate 只能 使用 Rust nightly 版本构建。

  • 基本上它支持 arm、i686、mips、mipsel 和 x86_64 平台,但我们只测试了

    • OS X 10.10.*, x86_64, nightly

    • ArchLinux, x86_64, nightly

感谢

  • Rust 开发者(从 libgreen 中切换上下文 ASM)

依赖关系

~560KB