mirror of
https://gitlab.com/fabinfra/fabaccess/bffh.git
synced 2024-11-24 23:57:57 +01:00
94 lines
2.8 KiB
Markdown
94 lines
2.8 KiB
Markdown
|
# Bastion Executor
|
||
|
|
||
|
<table align=left style='float: left; margin: 4px 10px 0px 0px; border: 1px solid #000000;'>
|
||
|
<tr>
|
||
|
<td>Latest Release</td>
|
||
|
<td>
|
||
|
<a href="https://crates.io/crates/bastion">
|
||
|
<img alt="Crates.io" src="https://img.shields.io/crates/v/bastion-executor.svg?style=popout-square">
|
||
|
</a>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td>License</td>
|
||
|
<td>
|
||
|
<a href="https://github.com/bastion-rs/bastion/blob/master/LICENSE">
|
||
|
<img alt="Crates.io" src="https://img.shields.io/crates/l/bastion.svg?style=popout-square">
|
||
|
</a>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td>Build Status</td>
|
||
|
<td>
|
||
|
<a href="https://actions-badge.atrox.dev/bastion-rs/bastion/goto">
|
||
|
<img alt="Build Status" src="https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fbastion-rs%2Fbastion%2Fbadge&style=flat" />
|
||
|
</a>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td>Downloads</td>
|
||
|
<td>
|
||
|
<a href="https://crates.io/crates/bastion-executor">
|
||
|
<img alt="Crates.io" src="https://img.shields.io/crates/d/bastion-executor.svg?style=popout-square">
|
||
|
</a>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td>Discord</td>
|
||
|
<td>
|
||
|
<a href="https://discord.gg/DqRqtRT">
|
||
|
<img src="https://img.shields.io/discord/628383521450360842.svg?logo=discord" />
|
||
|
</a>
|
||
|
</td>
|
||
|
</tr>
|
||
|
</table>
|
||
|
|
||
|
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](https://docs.rs/lightproc) to encapsulate and provide fault-tolerance to your future based workloads.
|
||
|
You can use your futures with [lightproc](https://docs.rs/lightproc) to run your workloads on Bastion Executor without the need to have framework.
|
||
|
|
||
|
## Example Usage
|
||
|
|
||
|
```rust
|
||
|
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(),
|
||
|
);
|
||
|
}
|
||
|
```
|