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

Tokio runtime worker线程在哈希函数中出现栈溢出问题求助

Tokio runtime worker线程在哈希函数中出现栈溢出问题求助

大家好!我正在写一个用来排查重复文件的小应用,主要也是为了练习Rust(我刚接触这门语言没多久😅)。

因为我之前做过媒体管理相关的工作,经常要处理超大文件,再加上想多学点并发相关的知识,所以我下定决心要让这个程序能高效利用我机器的多核性能。目前我选用了Tokio运行时库和deadqueue作为队列实现。

现在我的worker线程代码大致是这样的(worker_count初始设置为num_cores返回的核心数,之后会改成可通过命令行参数自定义):

println!("Starting up {} worker threads...", worker_count);
for n in 0..worker_count {
    let rxq = queue.clone();
    tokio::spawn(async move {
        eprintln!("INFO Thread {}", n);
        let _ = io::stderr().flush();
        loop {
            let ff = rxq.pop().await;
            eprintln!("Popped {}", ff.full_path.display());
            // 调用哈希计算函数时触发了栈溢出
            let hash = compute_hash(&ff.full_path).await?;
            // ...后续的哈希比对和重复文件标记逻辑
        }
    });
}

现在遇到的问题是,当compute_hash处理大文件的时候,worker线程会直接触发栈溢出错误。我猜测可能是哈希计算过程中把过多数据加载到栈上了,但不确定具体该怎么调整。有没有大佬能给我一些建议?比如是不是应该把哈希计算的内存分配转移到堆上,或者需要调整Tokio worker线程的栈大小?

备注:内容来源于stack exchange,提问作者fredex42

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:34:37