11个版本 (6个破坏性版本)
0.7.0 | 2024年5月1日 |
---|---|
0.5.2 | 2024年4月11日 |
0.5.0 | 2024年3月8日 |
0.2.2 | 2023年10月5日 |
#459 in 异步
每月下载量 205次
用于 2 crates
180KB
4K SLoC
hollywood
Hollywood是一个Rust的actor框架,专注于表示具有异构输入和输出的actors,这些actors被安排在一个非循环的compute图/管道中。设计意图是简单性和最小的样板代码。因此,Hollywood是对异步Rust的一般抽象,特别是对异步tokio运行时的抽象。如果您不寻求这种抽象,您可能希望直接使用tokio(或其他异步运行时)。
Actors是有状态的实体,通过发送消息相互通信。一个actor通过其输入通道接收消息流,处理它们并通过其输出通道向其他actors发送消息。actors要么是无状态的,这样其输出流就是其输入流的纯函数,要么具有内部状态,该状态由传入的消息更新,可能影响其输出消息的内容。
actors被安排在compute管道中(或者更准确地说,是一个有向无环图)。图的第一层由一组一个或多个源actors组成,其输出流由外部资源提供。源actors的一个典型例子包括传感器驱动程序或日志文件读取器。管道的终端actors要么没有输出通道,要么其输出通道未连接。终端actors通常是接收器actors,将数据提供给外部资源。接收器actors的例子包括机器人操作器、日志文件编写器或可视化组件。
除了actors之间的前馈连接之外,actors还可以通过一系列请求-响应通道相互通信。对于哪些actor对可以连接到这样的请求-响应通道没有限制。例如,请求-响应通道可以用来在计算流中创建反馈循环。
示例
以下示例演示了如何创建一个简单的管道,该管道具有周期性源actor,该actor为移动平均actor提供数据。移动平均actor连接到两个打印actor,它们将时间戳和移动平均值打印到控制台。
use hollywood::actors::{Periodic, Printer, PrinterProp};
use hollywood::prelude::*;
use hollywood::example_actors::moving_average::{MovingAverage, MovingAverageProp, MovingAverageState};
let pipeline = Hollywood::configure(&mut |context| {
let mut timer = Periodic::new_with_period(context, 1.0);
let mut moving_average = MovingAverage::from_prop_and_state(
context,
MovingAverageProp {
alpha: 0.3,
timeout: 5.0,
},
MovingAverageState::default(),
);
let mut time_printer = Printer::<f64>::from_prop_and_state(
context,
PrinterProp {
topic: "time".to_string(),
},
NullState::default(),
);
let mut average_printer = Printer::<f64>::from_prop_and_state(
context,
PrinterProp {
topic: "average".to_string(),
},
NullState::default(),
);
timer
.outbound
.time_stamp
.connect(context, &mut moving_average.inbound.value);
timer
.outbound
.time_stamp
.connect(context, &mut time_printer.inbound.printable);
moving_average
.outbound
.average
.connect(context, &mut average_printer.inbound.printable);
});
pipeline.print_flow_graph();
pipeline.run();
print_flow_graph
方法的输出是
*Periodic_0*
| time_stamp |
⡏⠉⠑⠒⠢⠤⠤⣀⣀
⡇ ⠉⠉⠑⠒⠢⠤⠤⣀⣀
⠁ ⠁
| Value | | Printable |
*MovingAverage_0* *Printer(time)_0*
| average |
⡇
⡇
⠁
| Printable |
*Printer(average)*
依赖项
~12–52MB
~860K SLoC