#actor #message #pipeline #async #async-trait

no-std act_rs

Act.rs 是一个与标准库和 Tokio 一起使用的actor库。

2个不稳定版本

0.2.0 2024年5月20日
0.1.0 2023年7月20日

#322 in 异步

每月22次下载
用于 2 crates

MIT/Apache

40KB
871 行代码

Act.rs

Crates.io License Downloads Docs Twitch Status

X | Twitch | Youtube | Mastodon | GitHub | GitHub Sponsors

Act.rs 是一个与标准库和 Tokio 一起使用的actor库。


什么是actor?

actor是一个在它自己的线程或任务中运行的实体。您通常可以通过消息队列与之通信。

actor有自己的状态,因此您可以向特定的actor发送一个消息,指示您希望它执行的操作,而不必将所有要做的事情都移动到它的作用域中。


actor的组成部分

Act.rs actor具有以下三个基本组件

  1. actor状态
  2. 交互器 - 可以是第1部分的一部分
  3. actor本身,它有两个自己的组件
    1. 前端 - actor用户与之交互的部分,包含交互器或其克隆。
    2. 后端 - actor执行其工作的线程/任务。actor状态被移动到这个作用域。

组合组件

创建一个包含actor状态的state struct,这包括一个交互器。

根据actor是否为异步的,这个state struct应该实现ActorState或AsyncActorState(宏生成的actor没有这个要求,状态可以直接实现所需的方法)

交互器通过HasInteractor暴露,这是ActorState和AsyncActorState都需要的。

最后将状态传递给actor构造函数,您就有了您的actor(请参阅示例)。


管道

actor的另一个潜在好处是它们可以使得设置管道相对简单。

您可能设置一个管道来将工作分成不同的阶段,这些阶段将在不同的线程上执行。


设置时的潜在问题

当使用输入消息队列设置actor时,您应该

  • 确保actor在执行工作时不等待过长或卡住(无限期等待)。
  • 如果您将actor作为管道的一部分使用,请注意消息循环。
  • 确保actor不会意外退出。

遵循这些指南,您应该能够愉快地使用Act.rs。


示例

请求它

逃逸它

Act.rs 异步特质测试


特性

特性 描述
tokio 启用基于Tokio的actor和interactor。
std 启用基于std的actor和interactor。

待办事项

  • 添加更多文档
  • 添加更多示例
  • 添加一些测试
  • 清理代码
  • 为1.0版本巩固API。
  • 为所有actor结构和宏添加方法,这些方法允许您在actor线程中构造actor状态,传递任何必要的参数以执行此操作,例如actor的interactor。
  • 改进代码重用
  • 移除actor状态应拥有interactor的要求(并提供对其的引用)。当使用通道进行交互时,在actor前端只使用发送端是有意义的。

可能性

  • 将所需的actor状态方法methods_on_enter、on_exit及其异步对应方法重命名为更合适的东西(特别是关于待办事项列表中提到的actor线程状态构造器)。
  • 添加其他异步框架实现,如smol

编码风格

本项目使用一种编码风格,强调使用空白空间而不是尽可能降低行和列数。

所以这是

fn foo()
{

    bar();

}

而不是这样

fn foo()
{
    bar();
}


许可证

许可方式之一

由您决定


贡献

请克隆仓库,创建一个说明您想添加哪些功能或要修复哪些错误的问题,以及您打算如何实现这些添加或修复的详细信息。尽管不需要详尽无遗,但我们会从那里开始(取决于可用性)。


除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,都应如上所述双许可,而不附加任何其他条款或条件。

依赖关系

~0.9–2.7MB
~51K SLoC