2个不稳定版本
0.2.0 | 2024年5月20日 |
---|---|
0.1.0 | 2023年7月20日 |
#322 in 异步
每月22次下载
用于 2 crates
40KB
871 行代码
Act.rs
X | Twitch | Youtube | Mastodon | GitHub | GitHub Sponsors
Act.rs 是一个与标准库和 Tokio 一起使用的actor库。
什么是actor?
actor是一个在它自己的线程或任务中运行的实体。您通常可以通过消息队列与之通信。
actor有自己的状态,因此您可以向特定的actor发送一个消息,指示您希望它执行的操作,而不必将所有要做的事情都移动到它的作用域中。
actor的组成部分
Act.rs actor具有以下三个基本组件
- actor状态
- 交互器 - 可以是第1部分的一部分
- actor本身,它有两个自己的组件
- 前端 - actor用户与之交互的部分,包含交互器或其克隆。
- 后端 - actor执行其工作的线程/任务。actor状态被移动到这个作用域。
组合组件
创建一个包含actor状态的state struct,这包括一个交互器。
根据actor是否为异步的,这个state struct应该实现ActorState或AsyncActorState(宏生成的actor没有这个要求,状态可以直接实现所需的方法)
交互器通过HasInteractor暴露,这是ActorState和AsyncActorState都需要的。
最后将状态传递给actor构造函数,您就有了您的actor(请参阅示例)。
管道
actor的另一个潜在好处是它们可以使得设置管道相对简单。
您可能设置一个管道来将工作分成不同的阶段,这些阶段将在不同的线程上执行。
设置时的潜在问题
当使用输入消息队列设置actor时,您应该
- 确保actor在执行工作时不等待过长或卡住(无限期等待)。
- 如果您将actor作为管道的一部分使用,请注意消息循环。
- 确保actor不会意外退出。
遵循这些指南,您应该能够愉快地使用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 License,版本2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0(另见:https://www.tldrlegal.com/license/apache-license-2-0-apache-2-0))
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT(另见:https://www.tldrlegal.com/license/mit-license))
由您决定
贡献
请克隆仓库,创建一个说明您想添加哪些功能或要修复哪些错误的问题,以及您打算如何实现这些添加或修复的详细信息。尽管不需要详尽无遗,但我们会从那里开始(取决于可用性)。
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,都应如上所述双许可,而不附加任何其他条款或条件。
依赖关系
~0.9–2.7MB
~51K SLoC