第七章:使用 Tokio 异步网络编程

在顺序编程模型中,代码总是按照编程语言的语义规定的顺序执行。因此,如果一个操作由于某种原因(等待资源等)而阻塞,则整个执行块只能在该操作完成后继续前进。这通常会导致资源利用率低下,因此主线程将忙于等待琴操作。在 GUI 应用程序中,这也导致用户交互不良,因为负责管理 GUI 的主线程正忙于等待其他东西。这是网络编程的一个主要问题。因为我们通常需要等待数据在套接字上可用。在过去,我们使用多个线程来解决这个问题。在这个模型中,我们将一个代价高昂的操作委托给一个后台线程,使主线程可以自由地进行用户交互或其他任务。相反,异步编程模型规定不应该阻止任何操作。但是我们如何实现这一目标呢?一种简单的方法是在自己的线程中运行每个操作,然后在所有这些线程上连接。实际上,由于大量潜在的线程和它们之间的协调,这很麻烦。

Rust提供了一些使用基于 Future 的事件循环驱动模型支持异步编程的 crate 。我们将在本章详细研究。 以下是我们将在此处讨论的主题:

  • Rust 的 Future 抽象
  • 使用 tokio 堆栈进行异步编程