atomic-bus
Atomic Bus: An unbounded, lock-free, multi-producer, multi-consumer pub/sub implementation that utilizes atomic operations.
Examples
Basic Send/Subscribe
The following example will start a sender thread and printing subscriber thread.
Code
use AtomicBus;
use ;
// create the bus
let bus: = new;
// subscribing before spawning the sender thread guarantees all sent messages will be received
let mut subscriber = bus.subscribe_mut;
// create and spawn a sender
let sender = bus.create_sender;
let arc_message = new;
spawn;
// spawn printing subscriber and wait for it to complete
spawn
.join
.unwrap;
Output
subscriber received: "hello world!"
subscriber received: "all messages are an Arc"
subscriber received: "done"
Load Balancing Subscription
The following example will start a sender thread and multiple subscriber threads that shared the
same [AtomicSubscriber] in order to load balance received events between multiple threads.
For the sake of this example, the subscriber threads will always sleep after attempting to poll
in order to simulate load and avoid a single greedy consumer receiving all events before others
have had a chance to start.
Code
use AtomicBus;
use ;
// create the bus
let bus: = new;
// subscribing before spawning the sender thread guarantees all sent messages will be received
let subscriber = new;
// create and spawn a sender
let sender = bus.create_sender;
spawn;
// spawn printing subscriber threads that share a single AtomicSubscription
let mut handles = Vecnew;
;
Output
subscriber 0 received: "message #0"
subscriber 1 received: "message #1"
subscriber 2 received: "message #2"
subscriber 0 received: "message #3"
subscriber 1 received: "message #4"
subscriber 2 received: "message #5"
subscriber 0 received: "message #6"
subscriber 1 received: "message #7"
subscriber 2 received: "message #8"
subscriber 0 received: "message #9"
License: MIT OR Apache-2.0