From efb5f7c136859dcb5084fd40ad1c3649f2b081e8 Mon Sep 17 00:00:00 2001 From: KaiserY Date: Fri, 25 Oct 2024 14:27:32 +0800 Subject: [PATCH] update ch17-02 --- src/ch17-02-concurrency-with-async.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/ch17-02-concurrency-with-async.md b/src/ch17-02-concurrency-with-async.md index 4e7aa62..ff90aa0 100644 --- a/src/ch17-02-concurrency-with-async.md +++ b/src/ch17-02-concurrency-with-async.md @@ -4,13 +4,13 @@ >
> commit 62d441060d66f9a1c3d3cdfffa8eed40f817d1aa -在这一部分,我们采用异步来应对一些之前第十六章中采用并发面对的相同的问题。因为之前我们已经讨论了很多关键理念了,这一部分我们会专注于线程与 future 的区别。 +在这一部分,我们将使用异步来应对一些与第十六章中通过线程解决的相同的并发问题。因为之前我们已经讨论了很多关键理念了,这一部分我们会专注于线程与 future 的区别。 在很多情况下,使用异步处理并发的 API 与使用线程的非常相似。在其它的一些情况,它们则非常不同。即便线程与异步的的 API *看起来* 很类似,通常它们有着不同的行为,同时它们几乎总是有着不同的性能特点。 ### 计数 -第十六章中我们应付的第一个任务是在两个不同的线程中计数。让我们用异步来做相同的事。`trpl` crate 提供了一个 `spawn_task` 函数,它看起来非常像 `thread::spawn` API,和一个 `sleep` 函数,这是 `thread::sleep` API 的异步版本。我们可以结合它们来实现与采用线程的相同的计数示例,如示例 17-6 所示。 +第十六章中我们应付的第一个任务是在两个不同的线程中计数。让我们用异步来完成相同的任务。`trpl` crate 提供了一个 `spawn_task` 函数,它看起来非常像 `thread::spawn` API,和一个 `sleep` 函数,这是 `thread::sleep` API 的异步版本。我们可以将它们结合使用,实现与线程示例相同的计数功能,如示例 17-6 所示。
@@ -28,9 +28,9 @@ > 注意:本章从现在开始,每一个示例的 `main` 中都会包含几乎相同的 `trpl::run` 封装代码,所以我们经常会连同 `main` 一同省略。别忘了在你的代码中加入它们! -接着我们在代码块中编写了两个循环,每个其中都有一个 `trpl::sleep` 调用,每一个都在发送下一个信息之前等待半秒钟(500 毫秒)。我们将一个循环放到 `trpl::spawn_task` 中并将另一个放在顶层的 `for` 循环中。我们也在 `sleep` 调用之后加入了一个 `await`。 +接着我们在代码块中编写了两个循环,每个其中都有一个 `trpl::sleep` 调用,每一个都在发送下一个信息之前等待半秒(500 毫秒)。我们将一个循环放到 `trpl::spawn_task` 中并将另一个放在顶层的 `for` 循环中。我们也在 `sleep` 调用之后加入了一个 `await`。 -它做了与基于线程的版本相同的工作,也包括运行时你可能在终端看到消息以不同的顺序出现的事实。 +这个实现与基于线程的版本类似,包括在运行时,你可能会在终端中看到消息以不同顺序出现的情况。