#actor-framework #actor #thread #minimalist #message #own #high

tonari-actor

A minimalist actor framework aiming for high performance and simplicity

10 releases (5 breaking)

0.8.3 Feb 28, 2023
0.8.2 Sep 7, 2022
0.8.1 Jun 14, 2022
0.8.0 Feb 17, 2022
0.4.1 Mar 4, 2021

#137 in Concurrency

Download history 13/week @ 2024-02-09 17/week @ 2024-02-16 92/week @ 2024-02-23 81/week @ 2024-03-01 20/week @ 2024-03-08 9/week @ 2024-03-15 2/week @ 2024-03-22

123 downloads per month
Used in downtown

MIT license

63KB
1K SLoC

tonari-actor

Crates.io Documentation

This crate aims to provide a minimalist and high-performance actor framework for Rust with significantly less complexity than other frameworks like Actix.

In this framework, each Actor is its own OS-level thread. This makes debugging noticeably simpler, and is suitably performant when the number of actors is less than or equal to the number of CPU threads.

Example

use tonari_actor::{Actor, Context, System};

struct TestActor {}

impl Actor for TestActor {
    type Error = ();
    type Message = usize;

    fn name() -> &'static str {
        "TestActor"
    }

    fn handle(&mut self, _context: &Context<Self>, message: Self::Message) -> Result<(), ()> {
        println!("message: {}", message);

        Ok(())
    }
}

fn main() {
    let mut system = System::new("default");

    // will spin up a new thread running this actor
    let addr = system.spawn(TestActor {}).unwrap();

    // send messages to actors to spin off work...
    addr.send(1usize).unwrap();

    // ask the actors to finish and join the threads.
    system.shutdown().unwrap();
}

Dependencies

  • cargo
  • rustc

Build

$ cargo build --release

Testing

$ cargo test

Code Format

The formatting options currently use nightly-only options.

$ cargo +nightly fmt

Code Linting

$ cargo clippy

Dependencies

~0.6–7MB
~17K SLoC