#executor #async-executor #non-blocking #async #send-sync

no-std nb-executor

基于事件位掩码的单future,#![no_std] 执行器

10个不稳定版本 (3个破坏性更新)

0.4.2 2022年2月26日
0.4.1 2022年2月26日
0.3.2 2022年2月21日
0.2.1 2022年1月24日
0.1.2 2022年1月22日

异步 中排名第2049

每月下载量 30

Apache-2.0

32KB
363

nb-executor

此crate提供具有以下功能的异步执行器

  • #![no_std],不依赖于 alloc

  • #![禁止(unsafe代码)].

  • 在当前执行线程上运行单个future。可以通过多路复用器(例如 futures::join!())实现并发。执行器本身是 !Send + !Sync

  • 一个对 Sync 友好的、原子32位 事件掩码 在执行器和所有外部事件源之间共享。用户定义一个事件集(例如,使用 bitflags)来使事件掩码具有意义。

  • 唤醒与边沿触发 信号 对应。事件掩码的共享引用足以 引发 信号。

  • 异步代码可以使用给定的 信号掩码 驱动非阻塞 poll函数。只要掩码中的任何信号被引发,就会尝试调用poll函数,直到它解析到其输出。这是执行异步工作的主要机制。

  • 只有当当前事件掩码与组合信号掩码之间存在交集时,才会轮询future。同样,如果其信号掩码与在轮询“root”future之前获取的事件掩码快照之间没有交集,则不会尝试调用poll函数。

  • 当假定目前不可能取得进一步进展时,将调用用户提供的 park函数。此函数可以进入无事件上下文,然后验证是否确实没有要执行的工作。然后,它可以以某种特定方式挂起执行器,例如在嵌入式固件上执行WFI/WFE风格的操作或在托管系统上使用 std::thread::park()

  • 默认使用无操作唤醒器。它可以替换为与park函数合作的另一个唤醒器。

许可证

nb-executor 采用 Apache-2.0 协议授权。

贡献

除非您明确声明,否则您提交给 nb-executor 以供包含的贡献将遵循 Apache-2.0 许可证的条款和条件,无需任何额外条款或条件。

依赖

~0.7–1MB
~18K SLoC