目前Rust使用最广的异步运行时是tokio,但tokio是一个十分完整的运行时,对于使用者来说几乎是一个黑盒,除非直接深入其源码,否则无法了解其结构与设计。这又使得tokio又像是一个无缝的蛋,当我们希望定制一些调度规则时,几乎是无从下手。
而smol作为tokio的“竞争对手”,其接口设计则好多了,将异步运行时拆分成相对独立的且小巧的几块(async-io
, async-executor
, async-task
等等),能学习者能更好地了解异步运行时的结构,也能让使用者方便定制一些特定的规则。
那么这篇文章,大概顺着smol给出的设计思路,从头实现一个简单但齐全的异步运行时,让大家对异步运行时有一个基础的理解。
本文代码参考这里
(一直想写这篇文章,但耽搁了好久)