Tokio_Tutorial

Tutorial | Tokio - An asynchronous Rust runtime

Tutorial

Tokio是用于Rust编程语言的异步运行时。它提供了编写网络应用所需的基础组件。Tokio具备灵活性,可以针对从具有数十个核心的大型服务器到小型嵌入式设备等广泛的系统进行优化。

在高层次上,Tokio提供了几个主要组件:

  1. 多线程运行时,用于执行异步代码。
  2. 异步版本的标准库。
  3. 大量的库生态系统。

Tokio's role in your project

当你以异步方式编写应用程序时,你通过减少同时执行多个任务的成本,使其能够更好地扩展。然而,异步的Rust代码不能独自运行,因此你必须选择一个运行时来执行它。Tokio库是最广泛使用的运行时,超过了所有其他运行时的总和。

此外,Tokio提供许多实用工具。在编写异步代码时,你不能使用Rust标准库提供的普通阻塞API,而必须使用它们的异步版本。这些替代版本由Tokio提供,在适当的情况下与Rust标准库的API保持一致

Advantages of Tokio

这部分将概述Tokio的一些优势。

快速

Tokio非常快速,建立在Rust编程语言之上,而Rust本身也是非常快速的。这是符合Rust精神的,目标是通过手工编写等效代码来提高性能是不可行的。

可扩展

Tokio建立在async/await语言特性之上,这本身也是可扩展的。在处理网络时,由于延迟存在,连接处理的速度存在一定限制,因此唯一的扩展方式是同时处理多个连接。使用async/await语言特性,增加并发操作的成本极低,使得可以轻松扩展到大量并发任务。

可靠

Tokio使用Rust构建,Rust语言赋予开发者们构建可靠高效软件的能力。多项研究表明,大约70%的高严重性安全漏洞是由于内存不安全导致的。使用Rust可以消除应用程序中整个类别的这类错误。

Tokio还专注于提供一致的行为,没有令人意外的情况。Tokio的主要目标是允许用户部署可预测的软件,每天都能以可靠的响应时间执行,避免不可预测的延迟波动。

简单易用

借助Rust的async/await特性,编写异步应用程序的复杂性大大降低。结合Tokio的工具和充满活力的生态系统,编写应用程序变得非常简单。

灵活

Tokio提供多种变体的运行时。从多线程、工作窃取的运行时到轻量级的单线程运行时,每种运行时都配备了许多参数,允许用户根据自己的需求进行调整。

When not to use Tokio

尽管Tokio非常适合许多需要同时执行多项任务的项目,但也有一些使用场景并不适合它。

  1. 加速CPU密集型计算:如果需要通过在多个线程上并行运行来加速CPU密集型计算,Tokio并不是一个理想的选择。Tokio的设计初衷是用于IO密集型应用,其中每个任务大部分时间都在等待IO操作完成。如果你的应用主要是并行计算,应当使用Rayon。不过,你也可以混合使用两者,具体实现可以参考相关的实际示例。
  2. 大量文件读取:尽管看起来Tokio对于需要简单读取大量文件的项目可能有用,但与普通线程池相比,Tokio在这里并不提供任何优势。这是因为操作系统通常不提供异步文件API,因此使用普通的线程池即可完成工作。
  3. 单个网络请求:在只需要发送单个网络请求时,Tokio并不会给你带来优势。Tokio的优势体现在需要同时处理多个任务的场景下。如果你需要使用诸如reqwest这样的异步Rust库,但并不需要同时处理多个任务,建议使用该库的阻塞版本,这样可以让项目结构更加简单。当然,使用Tokio仍然是可行的,但与阻塞API相比并没有真正的优势。如果库没有提供阻塞API,可以参考相关章节了解如何与同步代码进行桥接。

Getting Help

在任何时候,如果你遇到困难,都可以在Discord或GitHub讨论中寻求帮助。不用担心提出“初学者”的问题。我们都是从某个地方开始的,乐意提供帮助。

posted @ 2024-06-17 22:57  悲三乐二  阅读(84)  评论(0)    收藏  举报