2 个不稳定版本
0.2.0 | 2021年7月11日 |
---|---|
0.1.0 | 2021年6月21日 |
#1116 在 并发
80KB
2K SLoC
环岛
<目前处于实验状态>
面向消息的并发运行时。
环岛使用单个消息总线,该总线对整个程序来说是因果一致的。然后由可以修改其内部状态并发送消息的消息处理器并行读取此总线。
Cargo
要在项目中使用环岛,请将以下内容添加到您的 Cargo.toml
[dependencies]
roundabout = "0.2.0"
Hello World
use roundabout::prelude::*;
#[derive(Debug)]
pub struct PingEvent(u64);
#[derive(Debug)]
pub struct PongEvent(u64);
#[derive(Default)]
pub struct PingState {
count: u64,
}
fn ping_handler(builder: OpenMessageHandlerBuilder<PingState>) -> InitMessageHandlerBuilder<PingState> {
builder
.on::<PingEvent>(|state, context, ping| {
println!("Ping: {:?}", ping);
context.sender().send(PongEvent(state.count));
state.count += 1;
})
.init_default()
}
#[derive(Default)]
pub struct PongState {
count: u64,
}
fn pong_handler(builder: OpenMessageHandlerBuilder<PongState>) -> InitMessageHandlerBuilder<PongState> {
builder
.on::<PongEvent>(|state, context, pong| {
println!("Pong: {:?}", pong);
state.count += 1;
context.sender().send(PingEvent(state.count));
})
.init_default()
}
fn main() {
Runtime::builder(512)
.add(ping_handler)
.add(pong_handler)
.finish()
.start(PingEvent(0));
}
后续步骤
查看示例和基准测试。
许可协议
环岛在 Apache 2.0 和 MIT 许可协议下双授权。
请参阅 LICENSE_APACHE 和 LICENSE_MIT
依赖项
~1.8–2.4MB
~39K SLoC