11个版本 (6个重大变更)
0.9.0 | 2024年6月25日 |
---|---|
0.8.0 | 2024年4月19日 |
0.3.2 | 2024年3月31日 |
在 过程宏 中排名 1648
每月下载量 723
在 kameo 中使用
35KB
635 行
Kameo 🧚🏻
基于Tokio的容错异步Actor
- 异步:基于tokio,actor在其自己的独立派生任务中异步运行。
- 监督:通过子/父/兄弟关系链接actor,创建依赖关系。
- MPSC有界/无界通道:使用mpsc通道进行actor之间的消息传递,有界性可配置。
- 并发查询:在不需要可变状态时,支持查询的并发处理。
- 恐慌安全:内部捕获恐慌,允许actor重启。
安装
使用 cargo add
cargo add kameo
手动添加到依赖项
[dependencies]
kameo = "*"
无宏定义Actor
use kameo::Actor;
use kameo::message::{Context, Message};
// Define the actor state
struct Counter {
count: i64,
}
impl Actor for Counter {}
// Define messages
struct Inc { amount: u32 }
impl Message<Inc> for Counter {
type Reply = i64;
async fn handle(&mut self, msg: Counter, _ctx: Context<'_, Self, Self::Reply>) -> Self::Reply {
self.count += msg.0 as i64;
self.count
}
}
使用宏定义Actor
use kameo::{messages, Actor};
// Define the actor state
#[derive(Actor)]
struct Counter {
count: i64,
}
// Define messages
#[messages]
impl Counter {
#[message]
fn inc(&mut self, amount: u32) -> i64 {
self.count += amount as i64;
self.count
}
}
查看生成的宏代码
// Derive Actor
impl kameo::actor::Actor for Counter {
type Mailbox = kameo::actor::UnboundedMailbox<Self>;
fn name(&self) -> Cow<'_, str> {
Cow::Borrowed("Counter")
}
}
// Messages
struct Inc { amount: u32 }
impl kameo::message::Message<Inc> for Counter {
type Reply = i64;
async fn handle(&mut self, msg: &mut Inc, _ctx: Context<'_, Self, Self::Reply>) -> Self::Reply {
self.inc(msg.amount)
}
}
创建Actor并发送消息
let counter_ref = kameo::spawn(Counter { count: 0 });
let count = counter_ref.ask(Inc(42)).send().await?;
println!("Count is {count}");
ActorRef::ask
基准测试
与Actix相比,吞吐量提高了13倍
以下显示了向Kameo和Actix中的actor发送消息的基本基准测试。请始终为自己进行基准测试。
基准测试结果
向actor发送消息
基准测试 | 时间 |
---|---|
Kameo Unsync Message | 432.26 ns |
Kameo Sync Message | 503.89 ns |
Kameo Query | 1.3000 µs |
Actix Message | 5.7545 µs |
在actor中处理斐波那契序列至20
基准测试 | 时间 |
---|---|
Kameo Unsync Message | 18.229 µs |
Kameo Sync Message | 18.501 µs |
Kameo Query | 19.257 µs |
Actix Message | 27.442 µs |
贡献
欢迎贡献!请随意提交拉取请求、创建问题或提出改进建议。
许可证
kameo
适用于以下任一许可证
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache许可证,版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
由您选择。
依赖项
~285–730KB
~17K SLoC