11 releases

0.4.1 Feb 1, 2021
0.4.0 Sep 24, 2020
0.3.6 Aug 12, 2020
0.3.5 Jul 21, 2020
0.3.0 Nov 13, 2019

#61 in Concurrency

Download history 873/week @ 2021-04-02 1104/week @ 2021-04-09 913/week @ 2021-04-16 785/week @ 2021-04-23 779/week @ 2021-04-30 674/week @ 2021-05-07 1298/week @ 2021-05-14 1238/week @ 2021-05-21 723/week @ 2021-05-28 892/week @ 2021-06-04 610/week @ 2021-06-11 238/week @ 2021-06-18 251/week @ 2021-06-25 1269/week @ 2021-07-02 858/week @ 2021-07-09 397/week @ 2021-07-16

6,847 downloads per month
Used in 12 crates (4 directly)

Apache-2.0/MIT

195KB
3.5K SLoC

Bastion Executor

Latest Release Crates.io
License Crates.io
Build Status Build Status
Downloads Crates.io
Discord

Bastion Executor is NUMA-aware SMP based Fault-tolerant Executor

Bastion Executor is a highly-available, fault-tolerant, async communication oriented executor. Bastion's main idea is supplying a fully async runtime with fault-tolerance to work on heavy loads.

Main differences between other executors are:

  • Uses SMP based execution scheme to exploit cache affinity on multiple cores and execution is equally distributed over the system resources, which means utilizing the all system.
  • Uses NUMA-aware allocation for scheduler's queues and exploit locality on server workloads.
  • Tailored for creating middleware and working with actor model like concurrency and distributed communication.

NOTE: Bastion Executor is independent of it's framework implementation. It uses lightproc to encapsulate and provide fault-tolerance to your future based workloads. You can use your futures with lightproc to run your workloads on Bastion Executor without the need to have framework.

Example Usage

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(),
    );
}

Dependencies

~3.5MB
~65K SLoC