3 个版本
0.0.6 | 2021 年 3 月 5 日 |
---|---|
0.0.4 | 2021 年 3 月 4 日 |
0.0.1 | 2021 年 1 月 30 日 |
156 在 #macros 中
每月 23 次下载
用于 tractor
14KB
289 行
tractor
基于 Pony 的 actors 设计的 Rust Actor 框架
-
Actor
不会发生死锁! -
向
Actor
发送消息永远不会失败。 -
Actor
中没有async
。行为不能阻塞。 -
Actor
由垃圾回收器回收。 -
与 Rust 中的其他 Actor 实现相比,
tractor
的实现相当简单。 -
它使用
tokio
,但过去使用过async_std
。
示例
在 Cargo.toml
中添加 tractor = "*"
。
use tractor::prelude::*;
pub struct Adder {
sum: usize,
}
#[actor(derive_hooks)]
impl Adder {
fn inc(&mut self) {
self.sum += 1;
}
fn add(&mut self, num: usize) {
self.sum += num;
}
}
fn actor_main() {
let adder: Addr<Adder> = Adder { sum: 0 }.start();
/// This sends the `inc` message to the actor.
adder.inc();
/// This sends the `add` message to the actor.
adder.add(42);
}
fn main() {
ActorSystem::run_to_completion(actor_main);
}
更多信息
-
Actor
有无界邮箱,send
是非阻塞的。 -
Actor
不能手动停止。只要没有对它们的进一步引用并且邮箱为空,它们就会终止。这意味着向Actor
发送消息永远不会失败,除非耗尽内存。为了避免过载Actor
,您可以检查它的邮箱当前长度。 -
Actor
的行为没有返回值!因此,Actor
不支持“等待”结果。要“模拟”请求/响应,请将Actor
的地址放在消息中,并对其进行响应。 -
Actor
的行为不是 NOTasync fn
!Async
意味着执行可以“停止”。请使用异步 actor(《code>ActorBehaviorAsync /ActorHooksAsync
)。 -
注意:任何
Actor
循环都将破坏Actor
的垃圾回收。
依赖项
~2MB
~43K SLoC