#waker #async-executor #minimalist #async-task #future #own #system

无std woke

为执行器提供的最小化唤醒实现

4个版本

0.0.4 2022年7月16日
0.0.3 2022年7月16日
0.0.2 2019年10月9日
0.0.1 2019年10月6日

#156无标准库

Download history 527/week @ 2024-03-13 177/week @ 2024-03-20 246/week @ 2024-03-27 259/week @ 2024-04-03 143/week @ 2024-04-10 434/week @ 2024-04-17 429/week @ 2024-04-24 120/week @ 2024-05-01 104/week @ 2024-05-08 104/week @ 2024-05-15 102/week @ 2024-05-22 142/week @ 2024-05-29 107/week @ 2024-06-05 223/week @ 2024-06-12 101/week @ 2024-06-19 38/week @ 2024-06-26

每月477次下载
7 个crates(4个直接) 中使用

MIT/Apache

9KB
84

本项目旨在简化其他人为创建自己的自定义异步执行器而进行的旅程。代码库从futures-rs的其他开发者那里尊重性地继承而来(许可证在他们的名字中)。目标是提供最绝对的最小化唤醒系统,并阐明异步-await最具有挑战性的部分是如何工作的。

初学者:要查看一个超级简单的单个任务执行器,请查看 示例

要查看一个完整的多任务异步-await和执行器,请查看 howdy示例

异步-Await是如何工作的?

本节是为完全初学者准备的。

future 是一个通常开始某些长期活动(如计时器!)的对象。可以询问其当前状态(轮询),返回“已准备!”或“我还在工作,别烦我!”。Future可以依赖其他future来完成,创建一个轮询链。

executor 是一个包含需要轮询的future列表的对象。它逐个遍历它们,并询问“嘿,你完成了吗?”(轮询)。每次轮询一个future时,executor都会给它一个 waker,以便executor可以在future说它准备好了时再次检查它!

task 简单地说是一个最高级别的future。executor将轮询一系列task future,它们将轮询其子executor。不过,别担心,async { } 会自动生成大部分那种层次化的future依赖魔法!

waker 是一个可以在将来调用对象上的函数的对象,该函数将告诉executor“嘿,把我放回你的待办事项列表上!”。它使用了很多指针魔法,并且可以说是异步-await最令人费解的部分(也是编写 woke 的原因!)

context 简单地说是一个waker的持有者(以及未来可能的其他东西!)。它是executor在轮询时将waker提供给future的方式。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
woke = "0.0.3"

当前 async-await 功能需要 Rust 1.39 或更高版本。

许可证

本项目可根据您的选择采用以下任意一种许可证:

由您决定。

贡献

除非您明确声明,否则您提交给 woke 的任何有意贡献,根据 Apache-2.0 许可证定义,应作为上述双重许可发布,不附加任何额外条款或条件。

无运行时依赖