You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tokio的mpsc channel在同时丢弃Sender和Receiver时是否需要调用close?

Tokio mpsc 通道资源释放问题说明

示例代码

use tokio::sync::mpsc;

#[tokio::main]
async fn main() {
    let (mut sender, receiver) = mpsc::channel::<u32>(32);
    sender.send(42).await.unwrap();

    std::mem::drop(sender);
    std::mem::drop(receiver);
}

结论:你的操作完全安全,不存在内存泄漏风险

官方文档中提到的「未消费完通道值就丢弃Receiver会导致值永久滞留」的提示,有明确的适用前提:丢弃Receiver后仍有存活的Sender持有通道引用。这种场景下通道本身不会被销毁,内部缓存的未消费值会一直占用内存。

而你描述的场景中,所有Sender和Receiver都被主动drop,通道的所有外部引用计数归零,整个通道的内部结构会被完整回收,包括通道中未被消费的42值也会随之被释放,不需要额外调用close方法也不会产生内存泄漏。

哪怕调整Sender和Receiver的drop顺序,只要最终两类实例都被销毁,资源都会被正常回收。

内容的提问来源于stack exchange,提问作者Matteo Monti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:48:02