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

关于C++ multithreading与parallelism的概念区分及代码属性咨询

关于C++多线程中并发与并行的疑问

我正在学习C++多线程,尝试理解其工作原理,但未在网上找到清晰解释。编写了如下测试代码:

#include <iostream>
#include <thread> 
using namespace std; 

void thread_one() 
{ 
    while(true)
    {
        std::cout << " - " << std::flush;
        std::this_thread::sleep_for(1000ms);
    }
} 

void thread_two() 
{ 
    while(true)
    {
        std::cout << " * " << std::flush;
        std::this_thread::sleep_for(1000ms);
    }
} 

int main() 
{ 
    thread th1(thread_one); 
    thread th2(thread_two); 

    th1.join(); 
    th2.join();
} 

运行后输出类似* - - - * * * - * -的内容,可见两个线程在同时执行,但无法判断该程序是运行在parallelism模式下还是属于multithreading应用,也无法区分两者的差异。我当前的理解是:multithreading可利用多核同时执行多个任务(即Concurrently?);parallelism是单个核心并发执行两个不同任务。但仍不确定这段代码属于哪种情况,且我的理解是否正确,希望有人能解释两者的准确差异。


概念澄清与代码分析

核心概念纠正

你的理解刚好相反,两个概念的准确定义是:

  • 并发(Concurrency):单个CPU核心通过时间片轮转机制,交替执行多个线程/任务。从宏观视角看,多个任务像是在同时推进,但微观上同一时刻只有一个任务在运行。这种模式主要用于单核心CPU环境,让多个任务看起来“同时”执行。
  • 并行(Parallelism):多个CPU核心(或多处理器)同时独立执行不同的线程/任务,微观上同一时刻多个任务确实在同步运行。这是真正意义上的“同时执行”,必须依赖多核/多CPU的硬件支持。

你的代码所属情况

你的代码是标准的**多线程(multithreading)**应用,而它到底是并发运行还是并行运行,完全取决于你的硬件环境:

  • 若运行在单核心CPU上:两个线程会由操作系统调度,通过时间片轮转并发执行,同一时刻只有一个线程在输出,操作系统快速切换线程,宏观上呈现交替输出的效果。
  • 若运行在多核CPU上:操作系统可能将两个线程分配到不同的核心,此时它们会并行运行,两个核心同时执行各自的输出逻辑;当然操作系统也可能根据调度策略,将两个线程放在同一个核心上并发执行。

补充说明

多线程是实现并发或并行的一种技术手段,两者并非互斥关系:在多核环境下,多线程程序可能同时存在并发与并行的场景——比如四个线程被分配到两个核心上,每个核心通过时间片轮转并发执行两个线程,整体就同时包含了并发和并行的逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:50:26