From 84e5f82c1345fdb10d4ea0682cae99422156c077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=85=E5=B8=83=E4=B8=81?= Date: Tue, 3 May 2022 21:49:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=9C=89=E5=85=B3=20`join=5F?= =?UTF-8?q?all`=20=E6=80=A7=E8=83=BD=E9=97=AE=E9=A2=98=E7=9A=84=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=20(#10)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Xidorn Quan --- content/await-multiple-futures.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/content/await-multiple-futures.md b/content/await-multiple-futures.md index 8042174..a15596f 100644 --- a/content/await-multiple-futures.md +++ b/content/await-multiple-futures.md @@ -6,9 +6,7 @@ 如果想要在多个 `Future` 中的第一个完成后就返回,可以使用 futures 的 [`select`][select]、[`select_all`][select_all] 和 [`select_ok`][select_ok] 函数或 tokio 的 [`select!`][select-macro] 宏。 -需要注意的是,上面这些函数和宏在每次被轮询的时候,都会轮询里面每一个未完成的 `Future`,因此当其所带的 `Future` 很多时可能会有性能问题。 - -使用 futures 提供的 [`FuturesOrdered`][FuturesOrdered] 和 [`FuturesUnordered`][FuturesUnordered] 这两个结构可以解决这一问题。它们是为管理大量的 `Future` 而设计的,只会去轮询收到了唤醒通知的 `Future`。它们将这些 `Future` 聚合成一个 [`Stream`][Stream] 逐个返回里面 `Future` 的结果,其中前者会按照输入的 `Future` 的顺序返回,而后者则是以任意顺序(可以近似看作按照完成顺序)返回。 +此外,futures 还提供了 [`FuturesOrdered`][FuturesOrdered] 和 [`FuturesUnordered`][FuturesUnordered] 两个结构,它们将这些 `Future` 聚合成一个 [`Stream`][Stream] 逐个返回里面 `Future` 的结果。其中前者会按照输入的 `Future` 的顺序返回,而后者则是以任意顺序(可以近似看作按照完成顺序)返回。这两个结构额外提供了 `push` 方法来动态插入新的 `Future`,而且它们只会 `poll` 被唤醒的 `Future`,在 `Future` 数量较多时可能更高效。前面提到的 `join_all` 也会在一些情况下会自动使用 `FuturesOrdered` 来优化。 [futures]: https://crates.io/crates/futures @@ -31,4 +29,3 @@ [join-macro]: https://docs.rs/tokio/1/tokio/macro.join.html [try_join-macro]: https://docs.rs/tokio/1/tokio/macro.try_join.html [select-macro]: https://docs.rs/tokio/1/tokio/macro.select.html -