#context #switch #userland #stack #x86-64 #generator

nightly switcheroo

轻量级用户态上下文切换

12 个版本

0.2.9 2021年5月7日
0.2.8 2021年4月8日
0.2.6 2021年2月4日
0.2.3 2021年1月23日
0.1.1 2020年9月4日

#2 in #userland


被用于 async-wormhole

Apache-2.0/MIT

46KB
729 代码行,不包括注释

Switcheroo

文档

此库深受 https://github.com/edef1c/libfringe 的启发。

目前仅在 Rust nightly 版本上工作。

Switcheroo 为 Rust 提供轻量级上下文切换。它运行在 Windows、MacOs 和 Linux(x64 & AArch64)上。

示例

use switcheroo::stack::*;
use switcheroo::Generator;

fn  main() {
    let stack = EightMbStack::new().unwrap();
    let mut add_one = Generator::new(stack, |yielder, mut input| {
        loop {
            if input ==  0 {
                break;
            }
            input = yielder.suspend(input +  1);
        }
    });

    assert_eq!(add_one.resume(2), Some(3));
    assert_eq!(add_one.resume(127), Some(128));
    assert_eq!(add_one.resume(0), None);
    assert_eq!(add_one.resume(0), None);
}

性能

在我的 Macbook Pro 15"(2013 年晚些时候)上,每个上下文切换的性能相当于一次函数调用(亚纳秒级)。

开发者体验

Switcheroo 尽力 不让上下文切换干扰 Rust 在 panic 和 unwind 时的默认行为。显示的回溯应该跨越上下文切换边界。

在丢弃非空栈时,它将回滚以释放其上分配的任何资源。

许可证

根据您选择以下任一项进行许可:

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交给作品包含的任何贡献都将根据上述条款双许可,不附加任何额外的条款或条件。

依赖项

~215KB