#容错 #运行时 #actor #actor模型 #actor系统 #系统

bastion-executor

针对 Rust 的缓存亲和 NUMA 感知执行器

12 个版本

0.4.2 2022 年 1 月 7 日
0.4.1 2021 年 2 月 1 日
0.4.0 2020 年 9 月 24 日
0.3.5 2020 年 7 月 21 日
0.3.0 2019 年 11 月 13 日

#806并发

Download history 105/week @ 2024-03-25 175/week @ 2024-04-01 51/week @ 2024-04-08 76/week @ 2024-04-15 95/week @ 2024-04-22 58/week @ 2024-04-29 50/week @ 2024-05-06 61/week @ 2024-05-13 67/week @ 2024-05-20 49/week @ 2024-05-27 78/week @ 2024-06-03 48/week @ 2024-06-10 46/week @ 2024-06-17 56/week @ 2024-06-24 11/week @ 2024-07-01 24/week @ 2024-07-08

每月 152 次下载
用于 10 crate(3 个直接使用)

Apache-2.0/MIT

200KB
3.5K SLoC

Bastion Executor

最新版本 Crates.io
许可协议 Crates.io
构建状态 Build Status
下载量 Crates.io
Discord

Bastion Executor 是基于 NUMA 感知 SMP 的容错执行器

Bastion Executor 是一个高可用、容错的异步通信导向执行器。Bastion 的主要思想是提供一个具有容错能力的完全异步运行时,以便在高负载下工作。

与其他执行器的不同之处在于

  • 使用基于 SMP 的执行方案来利用多核上的缓存亲和性,并且执行在系统资源上均匀分布,这意味着利用了全部系统资源。
  • 为调度器队列使用 NUMA 感知分配,并利用服务器工作负载的局部性。
  • 针对创建中间件和与 actor 模型(如并发和分布式通信)一起工作而量身定制。

注意: Bastion Executor 与其框架实现无关。它使用 lightproc 来封装并提供对基于 future 的工作负载的容错能力。您可以使用 lightproc 来在 Bastion Executor 上运行工作负载,而无需框架。

示例用法

use bastion_executor::prelude::*;
use lightproc::proc_stack::ProcStack;

fn main() {
    let pid = 1;
    let stack = ProcStack::default()
        .with_pid(pid)
        .with_after_panic(move || println!("after panic {}", pid.clone()));

    let handle = spawn(
        async {
            panic!("test");
        },
        stack,
    );

    let pid = 2;
    let stack = ProcStack::default().with_pid(pid);

    run(
        async {
            handle.await;
        },
        stack.clone(),
    );
}

依赖项

~2.6–5MB
~87K SLoC