Tokio教程概况
Tokio是Rust编程语言的一个异步运行时。它提供了编写网络应用所需的构建模块。它提供了针对各种系统的灵活性,从有几十个内核的大型服务器到小型嵌入式设备。
在高层次上,Tokio提供了几个主要组件:
- 一个用于执行异步代码的多线程运行时。
- 一个标准库的异步版本。
- 一个庞大的库生态系统。
Tokio 在项目中的作用
当你以异步方式编写你的应用程序时,你可以通过减少在同一时间做许多事情的成本,使它能够更好地扩展。然而,异步的Rust代码不会自己运行,所以你必须选择一个运行时来执行它。Tokio库是使用最广泛的运行时,在使用量上超过了所有其他运行时的总和。
此外,Tokio提供了许多有用的工具。在编写异步代码时,你不能使用Rust标准库提供的普通阻塞API,而必须使用它们的异步版本。这些替代版本是由Tokio提供的,在有意义的地方反映了Rust标准库的API。
Tokio的优势
本节将概述Tokio的一些优势。
快速
Tokio 是快速的,它建立在 Rust 编程语言之上,而 Rust 编程语言本身是快速的。这是按照 Rust 的精神来做的,目标是你不应该通过手工编写同等的代码来提高性能。
Tokio是可扩展的,建立在 async/await 语言特性之上,而这本身就是可扩展的。当处理网络时,由于延迟的原因,你能处理一个连接的速度是有限的,所以唯一的扩展方式是一次处理许多连接。有了 async/await 语言功能,增加并发操作的数量变得异常便宜,使你可以扩展到大量的并发任务。
可靠的
Tokio 是用 Rust 构建的,Rust 是一种使每个人都能构建可靠和高效软件的语言。一些研究发现,大约有70%的高严重度安全漏洞是由内存不安全造成的。使用Rust可以在你的应用程序中消除这整类错误。
Tokio也非常注重提供一致的行为,没有任何意外。Tokio的主要目标是让用户部署可预测的软件,使其每天都有相同的表现,有可靠的响应时间,没有不可预知的延迟峰值。
简单
有了Rust的 async/await 功能,编写异步应用程序的复杂性就大大降低了。与Tokio的实用程序和充满活力的生态系统搭配,编写应用程序是一件轻而易举的事。
Tokio在合理的情况下遵循标准库的命名惯例。这使得只用标准库编写的代码很容易转换为用Tokio编写的代码。有了Rust强大的类型系统,轻松提供正确代码的能力是无可比拟的。
灵活
Tokio提供了多种运行时的变化。从多线程的、work-stealing 的运行时到轻量级的、单线程的运行时都有。每个运行时都有许多旋钮,允许用户根据自己的需要进行调整。
什么时候不使用Tokio
虽然Tokio对许多需要同时做很多事情的项目很有用,但也有一些Tokio不适合的使用情况。
-
通过在几个线程上并行运行来加速由CPU控制的计算。Tokio是为IO绑定的应用而设计的,在这种情况下,每个单独的任务大部分时间都在等待IO。如果你的应用程序唯一做的事情是并行运行计算,你应该使用rayon。也就是说,如果你需要同时做这两件事,还是可以 “混合搭配” 的。
-
读取大量的文件。虽然看起来Tokio对那些仅仅需要读取大量文件的项目很有用,但与普通线程池相比,Tokio在这里没有提供任何优势。这是因为操作系统一般不提供异步文件API。
-
发送单个网络请求。Tokio给你带来优势的地方是当你需要同时做很多事情时。如果你需要使用一个用于异步Rust的库,如reqwest,但你不需要同时做很多事情,你应该选择该库的阻塞版本,因为它将使你的项目更简单。当然,使用Tokio仍然可以工作,但与阻塞式API相比,没有提供真正的优势。如果该库没有提供阻塞式的API,请看关于用同步代码桥接的章节。