异步编程是现代互联网编程的趋势,例如Js的promise设计,Java的netty框架,Golang的协程,Php的Swoole扩展。所以,Rust在异步编程领域必然会加大深耕力度,相关的三方开源异步库也会越来越多,其中Tokio是比较成熟的一个异步框架。
![55cd85206545a130177df7926fbedb5b.png](https://i-blog.csdnimg.cn/blog_migrate/87615a0c6e61f34b8f1e9a7276b3310b.png)
什么是Tokio
Tokio是Rust异步编程使用最多的半官方开源库,涵盖了fs文件IO、net网络IO以及time定时器等异步编程必备的实现方案,几乎90%以上的三方库采用Tokio作为底层的异步框架。
为了更容易理解Tokio,我们先从Tokio的执行调度器的源码来看看它的异步任务是怎么调度的。
Basic调度器
Basic Scheduler是Tokio默认的任务调度器,使用单线程-多任务的设计结构,每个任务的执行采用的是轻量化的线程模型。
轻量化的线程模型,又称协程,将任务的上下文切换由内核态改变为用户态,对于线程本身来说,所有的任务都在当前线程执行,只不过遇到IO操作会让出自己,把线程的运行所有权交给队列中的下一个任务,并将自己转移到队列的末尾等待下一次轮询。