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