7 个版本
0.2.3 | 2024 年 6 月 19 日 |
---|---|
0.2.2 | 2018 年 5 月 14 日 |
0.1.2 | 2018 年 5 月 8 日 |
0.1.0 | 2017 年 12 月 29 日 |
#246 in 并发
每月 28 次下载
18KB
280 行
may_actor
基于 may 的 Rust 原生 Actor 库
使用此库
- 你不需要声明传递给 Actor 的消息
- 你不需要为你的 Actor 实现 “actor” 接口或 trait。
- Actor 将自动拥有由 may 提供的 M:N 调度
用法
extern crate may_actor;
use may_actor::Actor;
fn main() {
struct HelloActor(u32);
let a = Actor::new(HelloActor(0));
a.call(|me| {
me.0 = 10;
println!("hello world");
});
// the with would wait previous messages process done
a.with(|me| println!("actor value is {}", me.0));
}
有关详细示例,请参阅 pi.rs
功能
- 通过闭包发送消息 (
Actor.call
)
您可以使用 call
API 向 Actor 发送消息。它接受一个参数为 &mut T
的闭包,因此您可以更改其内部状态。闭包将被发送到 Actor 内部的队列中,Actor 将通过与其关联的协程异步执行闭包。此 API 不会阻塞用户的执行并立即返回。如果闭包中发生 panic,它将在 Actor 的协程上下文中被捕获并忽略。
- 在 Actor 协程上下文中同步运行闭包 (
Actor.with
)
您还可以使用 with
API 同步地操作 Actor 的内部状态。它接受一个参数为 &mut T
的闭包,因此您可以查看或修改 Actor 的内部状态。如果没有任何待处理的消息,闭包将由关联的协程执行。它将阻塞,直到闭包将结果返回给调用者。如果在闭包中发生 panic,它将传播到调用者的上下文。
- 从原始实例引用转换为 Actor (
Actor.from
)
您可以将 &self
类型不安全地转换为其句柄类型 Actor<T>
。当需要将 Actor 句柄作为函数参数传递的实现时,这很有用。
然而,从非 Actor 上下文中转换将触发未定义的行为。
-
允许在闭包消息内部发生 panic,并且这不会杀死 Actor,Actor 将继续处理后续的消息。
-
演员可以被克隆以获取新的句柄,这就像
Arc<T>
的工作方式一样,如果所有演员句柄都被丢弃,相关的协程将自动退出。
注意
- 演员在处理消息时将捕获恐慌并忽略任何发生的恐慌,因此目前没有监督和重启策略。只有当所有句柄都被用户丢弃时,演员才会退出。
- 不要在传入的闭包中调用线程阻塞API,而应调用 May 版本的API。
- 这个简单的库不支持跨进程创建演员。
许可证
may_actor
的许可证为以下之一,供您选择:
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
依赖关系
~3–29MB
~422K SLoC