#消息总线 #总线 #消息 #队列

roundabout

面向消息的并发运行时

2 个不稳定版本

0.2.0 2021年7月11日
0.1.0 2021年6月21日

#1116并发

MIT/Apache

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_APACHELICENSE_MIT

依赖项

~1.8–2.4MB
~39K SLoC