为什么一个简单的C ++代码会占用我的Raspberry CPU的大量内存?

时间:2018-10-04 05:18:06

标签: c++ multithreading cpu-usage

我正在尝试使用多线程技术重写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;
}

CPU使用率: enter image description here

2 个答案:

答案 0 :(得分:1)

在阅读你们所有人的评论后,我搜索了kworker并发现它主要执行I / O,这实际上消耗了我的大量CPU,如Mat所说。现在,在将I / O(printf)退出循环之后,一切似乎都没问题,只能在1个内核上运行,非常感谢大家对我的帮助!

答案 1 :(得分:-1)

由于无限循环,这对于CPU可能是多余的。大量的控制台输出或堆栈使用量可能会导致内存过大。