我有一个主流程可以创建4个线程。如果我只运行所有4个线程,内核将使用所有4个内核,还是程序在单个内核上是多线程的?如果没有,那么如何在多核上处理同步。我有一个4核英特尔CPU,我的程序是用c ++
我在虚拟机中的linux上运行它。
答案 0 :(得分:3)
你真的不知道。
首先,C ++ 03标准不知道任何关于线程,核心或任何类型的东西。所以这无论如何都依赖于平台。
但即使从平台的角度来看,你通常仍然不知道。操作系统调度线程和作业。操作系统可能 - 或者可能不会 - 为您提供为特定线程指定“processor affinity”的方法,但这通常需要一些环节跳跃才能使用。
您还应该记住的一件事是,如果您的目标是保持每个核心100%被利用,那么您通常需要的不仅仅是 n 线程(其中 n < / strong>是核心数量)。线程花费大量时间睡眠,在磁盘上等待,并且通常不会在核心上执行任何操作。您需要的确切线程数取决于您的实际应用程序和平台,但实验可以帮助您进行微调。