Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么一个简单的C++;代码消耗了很多我的树莓';什么是CPU? 我试图用多线程技术重写我的C++项目,使它尽可能多地消耗CPU(在它只运行在1内核之前)。因此,为了测试多线程是否可以使一块C++代码运行在许多内核上,我尝试编写一个非常简单的测试,下面是单线程,另一个是用多线程进行比较。然而,当我在我的Raspberry Pi上运行它们时,我得到的结果是,即使是通常的代码也消耗了我大量的CPU,并在多个内核上运行。这怎么可能?我认为它应该只在一个核心上运行,因为它太简单了_C++_Multithreading_Cpu Usage - Fatal编程技术网

为什么一个简单的C++;代码消耗了很多我的树莓';什么是CPU? 我试图用多线程技术重写我的C++项目,使它尽可能多地消耗CPU(在它只运行在1内核之前)。因此,为了测试多线程是否可以使一块C++代码运行在许多内核上,我尝试编写一个非常简单的测试,下面是单线程,另一个是用多线程进行比较。然而,当我在我的Raspberry Pi上运行它们时,我得到的结果是,即使是通常的代码也消耗了我大量的CPU,并在多个内核上运行。这怎么可能?我认为它应该只在一个核心上运行,因为它太简单了

为什么一个简单的C++;代码消耗了很多我的树莓';什么是CPU? 我试图用多线程技术重写我的C++项目,使它尽可能多地消耗CPU(在它只运行在1内核之前)。因此,为了测试多线程是否可以使一块C++代码运行在许多内核上,我尝试编写一个非常简单的测试,下面是单线程,另一个是用多线程进行比较。然而,当我在我的Raspberry Pi上运行它们时,我得到的结果是,即使是通常的代码也消耗了我大量的CPU,并在多个内核上运行。这怎么可能?我认为它应该只在一个核心上运行,因为它太简单了,c++,multithreading,cpu-usage,C++,Multithreading,Cpu Usage,所以这让我很困惑,因为我无法证明使用多线程可以让我的代码在多个内核上运行,因为如果不使用它,我会得到相同的结果:( #包括 #包括 #包括 //#包括 使用名称空间std; //互斥mtx; 内部pl(内部a){ 返回a+=35; } int main(int argc,char*argv\[\]) { int num=20; 而(1){ int ai=pl(num); printf(“结果编号为%d\n”,ai); } cout这可能是对CPU的过度消耗,因为while循环是无限的。高内存可能

所以这让我很困惑,因为我无法证明使用多线程可以让我的代码在多个内核上运行,因为如果不使用它,我会得到相同的结果:(

#包括
#包括
#包括
//#包括
使用名称空间std;
//互斥mtx;
内部pl(内部a){
返回a+=35;
}
int main(int argc,char*argv\[\])
{
int num=20;
而(1){
int ai=pl(num);
printf(“结果编号为%d\n”,ai);
}

cout这可能是对CPU的过度消耗,因为while循环是无限的。高内存可能是由大量控制台输出或堆栈使用造成的。

在阅读了你们所有人的评论后,我搜索了kworker,发现它主要执行i/O,正如Mat所说,这确实消耗了我大量的CPU。现在在获得i/O(printf)之后脱离循环一切正常,只在一个内核上运行,非常感谢大家的帮助!

I/O速度慢,可能会阻塞,是操作系统重新安排程序的好机会。不要在一个紧密的循环中执行printfs。请注意kworker正在出现-您的程序可能不是多线程的,但您的内核是。请尝试用谷歌搜索
kworker树莓皮
#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;
}