Tokio教程概况

Tokio介绍,优势和不适用的场景

内容出处: https://tokio.rs/tokio/tutorial

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,请看关于用同步代码桥接的章节。