我正在尝试使用多线程技术重写C ++项目,以使其消耗尽可能多的CPU(之前仅在1个内核上运行)。因此,为了测试多线程是否可以使一段C ++代码在许多内核上运行,我尝试在下面编写一个非常简单的测试,即单线程,以及另一个要比较的多线程版本。但是,当我在Raspberry Pi上运行它们时得到的结果是,即使是通常的代码也消耗了我大量的CPU,并在多个内核上运行。那怎么可能?我认为它应该只在1个内核上运行,因为它是如此简单!!
所以这让我感到困惑,因为有了这些结果,我无法证明使用多线程可以使我的代码在多个内核上运行,因为如果不使用它,我会得到相同的结果:(
#include <iostream>
#include <thread>
#include <math.h>
//#include <mutex>
using namespace std;
//mutex mtx;
int pl(int a){
return a +=35;
}
int main(int argc, char *argv\[\])
{
int num = 20;
while(1){
int ai = pl(num);
printf("result num is %d\n", ai);
}
cout << "Main: program completed" << endl;
return 0;
}
答案 0 :(得分:1)
在阅读你们所有人的评论后,我搜索了kworker并发现它主要执行I / O,这实际上消耗了我的大量CPU,如Mat所说。现在,在将I / O(printf)退出循环之后,一切似乎都没问题,只能在1个内核上运行,非常感谢大家对我的帮助!
答案 1 :(得分:-1)
由于无限循环,这对于CPU可能是多余的。大量的控制台输出或堆栈使用量可能会导致内存过大。