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
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版本,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义,您有意提交给作品包含的任何贡献都将根据上述条款双许可,不附加任何额外的条款或条件。
依赖项
~215KB