博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程执行CPU过高问题
阅读量:4167 次
发布时间:2019-05-26

本文共 1358 字,大约阅读时间需要 4 分钟。

在项目开发过程中使用到多线程技术,有时程序运行起来占用CPU很高(具体占用多少,跟你的CPU核数有关。若是单核,可能直接100%),应该以release版本的运行的情况为准(因为若是多个子线程间的阻塞没处理好,可能调试过程中查看的CPU占用并不高)。这种问题,一般都是在多线程的处理中,有死循环了。

解决办法:

找到所有的线程处理函数并在入口打上断点,耐心的一步步调试,只要坚信问题的存在,最后总是会找出问题的。

 

CPU占用高不高,跟你的线程数多少没有太多的影响。因为若你CPU是双核,即使只创建了2个子线程,而这两个子线程是2个死循环,此时你的CPU占用也会是相当的高的。

不信的可以直接试试。

CPU占用高不高也不能只看本程序运行起来的CPU占用率,因为若是你的程序使用了内核对象的调用,那么在任务管理器中你会看到你的程序占用CPU是不高的,但使用到内核对象在内核调用中的那些服务程序就会显示CPU占用高。

int _tmain(int argc, _TCHAR* argv[]){	InitializeCriticalSection(&m_gCriticalSection);	//一个线程最多可以挂起 MAXIMUM_SUSPEND_COUNT次,即127次	//线程1	unsigned threadID;	hThread1 = (HANDLE)_beginthreadex(NULL, 0, ThreadProc1, NULL, 0, &threadID);		//线程2	unsigned threadID2;	hThread2 = (HANDLE)_beginthreadex(NULL, 0, ThreadProc2, NULL, 0, &threadID2);
return 0;}
unsigned __stdcall ThreadProc1(void* pParam){	//打印数字iCount	if(0 == m_gCount)	{		Sleep(2000);	}	while(1)	{		EnterCriticalSection(&m_gCriticalSection);		m_gCount++;		cout << "线程一:" << m_gCount << endl; //两个线程函数中的的这句不注释掉,该程序在任务管理中显示占用的CPU是不高的,但内核调用占用CPU很高
						  //若是注释掉,则程序在任务管理器中显示占用的CPU就会很高		LeaveCriticalSection(&m_gCriticalSection);				//Sleep(1000);	}	return 0;}unsigned __stdcall ThreadProc2(void* pParam){	//打印数字iCount	while(1)	{		EnterCriticalSection(&m_gCriticalSection);		m_gCount++;		cout << "另一线程:" << m_gCount << endl; 		LeaveCriticalSection(&m_gCriticalSection);				//Sleep(1000);	}	return 0;}

 

 

转载地址:http://sylxi.baihongyu.com/

你可能感兴趣的文章
2、关于点云格式的碎碎念
查看>>
ROS初始化时候sudo rosdep init rosdep update出现的各种问题亲测成功的解决办法(2020.12.29已解决!)
查看>>
6、ubuntu16.04 下 pcl的vogelgrid降采样处理 过程
查看>>
8、在ubuntu16.04 、ROS下使用 rviz 显示octomap_sever 构建的三维栅格地图
查看>>
如何在ubuntu16.04下运行第一个C++和python程序,以helloworld为例
查看>>
古月居 PyTorch入门:一起从零搭建神经网络一、PyTorch环境搭建
查看>>
古月居 PyTorch入门:一起从零搭建神经网络二、PyTorch基础知识
查看>>
古月居 PyTorch入门:一起从零搭建神经网络 三、快速搭建一个简单的神经网络
查看>>
用函数实现判断一个数是不是素数
查看>>
古月居 PyTorch入门:一起从零搭建神经网络 六、PyTorch车牌字符识别项目三
查看>>
古月居 PyTorch入门:一起从零搭建神经网络 七、PyTorch车牌字符识别项目四
查看>>
搜索旋转排序数组 II
查看>>
最大子序和
查看>>
爬楼梯
查看>>
汉明距离
查看>>
二叉树的最大深度
查看>>
N 叉树的最大深度
查看>>
合并二叉树
查看>>
翻转二叉树
查看>>
反转链表
查看>>