结论

至此,我们已经获得了一个功能相对完整的异步运行时了。这里将异步运行时打碎成block_on, Reactor, Executor三个最基础的组件,其实我们已经拥有了几乎没有上限的定制运行时的能力,我们完全可以控制Future的执行时机,可以拥有什么权限等等。

可惜,现在tokio当道,tokio则几乎没有定制的能力,作为使用者没法拒绝得了tokio全家桶,哎。

最后画一个图来总结下

relation

  1. 异步运行时最基础的一个功能是block_on(),对一个Future进行求值,其最简单实现就是对Future进行轮询poll
  2. 我们通过引入一个Reactor(一个IO的event loop),获得了异步IO的能力,比如文件读写、Timer等。
  3. 然后我们再加入一个Executor时(利用多线程对Task进行调度),我们就获得了多线程并发的能力,也就是spawn()接口。
  4. 同时有了block_on(), ExecutorReactor之后,我们就能获得一个功能相对完整的异步运行时。(当然,不一定要有ExecutorReactor这两个抽象,tokio就是将两者合二为一)