From d447803d38f2b6b94ec10348e206d5be91ef8c3c Mon Sep 17 00:00:00 2001 From: yuzheng14 <422450117@qq.com> Date: Mon, 19 May 2025 11:49:57 +0800 Subject: [PATCH] docs: align with upstream tokio docs remove crossbeam, use std::sync::mpsc channel instead, align with upstream according to https://github.com/tokio-rs/website/pull/727 --- src/advance-practice/async.md | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/advance-practice/async.md b/src/advance-practice/async.md index 1da47d04..79e9b765 100644 --- a/src/advance-practice/async.md +++ b/src/advance-practice/async.md @@ -353,21 +353,15 @@ impl Future for Delay { > 关于 `Send` 和 `Sync` 的具体讲解见[这里](https://course.rs/advance/concurrency-with-threads/send-sync.html) -基于以上理由,我们选择使用来自于 `crossbeam` 的消息通道,因为标准库中的消息通道不是 `Sync` 的。在 `Cargo.toml` 中添加以下依赖: - -```toml -crossbeam = "0.8" -``` - -再来更新下 `MiniTokio` 结构体: +现在更新下 `MiniTokio` 结构体: ```rust -use crossbeam::channel; +use std::sync::mpsc; use std::sync::Arc; struct MiniTokio { - scheduled: channel::Receiver>, - sender: channel::Sender>, + scheduled: mpsc::Receiver>, + sender: mpsc::Sender>, } struct Task { @@ -386,7 +380,7 @@ struct Task { // `Mutex` 是为了让 `Task` 实现 `Sync` 特征,它能保证同一时间只有一个线程可以访问 `Future`。 // 事实上 `Mutex` 并没有在 Tokio 中被使用,这里我们只是为了简化: Tokio 的真实代码实在太长了 :D future: Mutex + Send>>>, - executor: channel::Sender>, + executor: mpsc::Sender>, } impl Task { @@ -429,7 +423,7 @@ impl MiniTokio { /// 初始化一个新的 mini-tokio 实例 fn new() -> MiniTokio { - let (sender, scheduled) = channel::unbounded(); + let (sender, scheduled) = mpsc::channel(); MiniTokio { scheduled, sender } } @@ -460,7 +454,7 @@ impl Task { // 使用给定的 future 来生成新的任务 // // 新的任务会被推到 `sender` 中,接着该消息通道的接收端就可以获取该任务,然后执行 - fn spawn(future: F, sender: &channel::Sender>) + fn spawn(future: F, sender: &mpsc::Sender>) where F: Future + Send + 'static, {