#worker-thread #multi-threading #run-time #tasks #boilerplate #entities

employees

一个小型运行时,使用线程时隐藏所有样板代码

6 个版本

0.0.6 2024 年 4 月 8 日
0.0.5 2024 年 4 月 5 日
0.0.4 2023 年 12 月 15 日
0.0.3 2023 年 11 月 21 日

#207并发

Download history 1/week @ 2024-05-20 18/week @ 2024-07-01

每月 296 次下载

MIT 许可证

66KB
879

employees

一个轻量级 crate,用于隐藏设置线程的大部分负担。

哲学

这个 crate 将线程视为名为 workers 的独特实体,它们随着程序的生命周期而存在。

人们可能会注意到与 async tasks 有很多相似之处,但有一个主要区别。虽然 tasks 被设计成短的非阻塞并发代码块,在异步运行时中运行,但另一方面,workers 则完全相反

  • 它们在自己的操作系统线程上运行。
  • 它们被设计为运行很长时间(通常是程序的生命周期)。
  • 它们可以阻塞操作,只要它们(主要是)想要,而不会影响其他 workers

与完整的实体组件系统(ECS)和这个 crate 之间存在一些相似之处。在某些方面,这个 crate 可以被视为没有 C 部分的 ECS。

使用方法

以下是一个小型示例,它创建了一个每 100 毫秒打印 "Hello, World!" 一秒钟的 worker。

struct WorkerThatPrints;
impl Worker for WorkerThatPrints {
    fn on_update(&mut self) -> ControlFlow {
        println!("Hello, World!");
        std::thread::sleep(Duration::from_millis(100));
        ControlFlow::Continue
    }
}

let mut runtime = Runtime::new();

runtime.launch(WorkerThatPrints);
std::thread::sleep(Duration::from_secs(1));

有关更详细的信息,请参阅 完整文档

许可证

根据 MIT 许可证许可。有关详细信息,请参阅 LICENSE

依赖关系

~0.2–7MB
~37K SLoC