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

为何简单C++多线程示例运行速度比单线程更慢?

多线程为何反而比单线程慢?

我正在学习基础C++多线程,为理解相关概念编写了一段测试代码。一直听说多线程运行更快,于是写了如下代码:

int main()
{
    //---- SECTION 1
    Timer timer;
    Func();
    Func();
    
    //---- SECTION 2
    Timer timer;
    std::thread t(Func);
    Func();
    t.join();
}

Timer的实现:

Timer()
{
    start = std::chrono::high_resolution_clock::now();
}

~Timer()
{
    end = std::chrono::high_resolution_clock::now();
    duration = end - start;

    //To get duration in MilliSeconds
    float ms = duration.count() * 1000.0f;

    std::cout << "Timer : " << ms << " milliseconds\n";
}

运行结果:单线程的Section 1耗时0.1ms-0.2ms;多线程的Section 2耗时1ms及以上,明明多线程应该更快,实际却更慢,希望得到解答,纠正概念误区。

核心原因与概念纠正

  • 线程创建存在固定开销:创建std::thread需要操作系统分配内核资源、初始化线程栈、调度器将线程挂载到CPU核心上,这些操作本身就需要消耗时间(通常在毫秒级)。你的Func()执行时间只有0.1ms左右,线程创建的开销直接盖过了并行执行带来的收益。
  • 任务粒度太轻量:多线程的优势体现在任务能真正并行且执行时间足够长的场景。如果任务本身执行时间极短,并行节省的时间远不如线程创建、上下文切换的成本高。比如把Func()改成执行1秒的计算,多线程版本耗时会接近单线程的一半;但当前任务太轻,完全体现不出并行优势。
  • 线程调度的不确定性:多线程版本中,系统需要调度新创建的线程到CPU上执行,这个调度过程存在延迟,加上极短时间的计时本身误差较大,会进一步放大多线程版本的耗时。
  • 多线程不是“万能加速”:多线程的加速逻辑是把可并行的任务拆分到多个CPU核心同时执行,但只有当任务的并行收益超过线程管理的开销时,才会比单线程快。对于IO密集型任务(比如等待磁盘、网络响应),多线程可以让CPU在等待时处理其他任务,这也是优势,但你的场景是纯计算且任务太轻,完全不匹配。

内容的提问来源于stack exchange,提问作者Thomas A Mathew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:35:12