2024年4月2日发(作者:)
多线程执行CPU过高问题
推荐文章
cpu鲁大师性评分排名 热度: 电脑cpu温度过高怎么办 热度: iphone5s的详细参
数 热度: Linux中怎么限制CPU的占用率 热度: Corei7CPU处理器性能区别 热度:
在项目开发过程中使用到多线程技术,有时程序运行起来占用CPU很高(具体占用多
少,跟你的CPU核数有关。CPU过高的问题,CPU多线程的问题,下面是店铺带来的关
于多线程执行CPU过高问题的内容,欢迎阅读!
多线程执行CPU过高问题:
CPU占用高不高,跟你的线程数多少没有太多的影响。因为若你CPU是双核,即使
只创建了2个子线程,而这两个子线程是2个死循环,此时你的CPU占用也会是相当的
高的。
不信的可以直接试试。
CPU占用高不高也不能只看本程序运行起来的CPU占用率,因为若是你的程序使用
了内核对象的调用,那么在任务管理器中你会看到你的程序占用CPU是不高的,但使用
到内核对象在内核调用中的那些服务程序就会显示CPU占用高。
[cpp] view plain?
1. int _tmain(int argc, _TCHAR* argv[])
2. {
3. InitializeCriticalSection(&m_gCriticalSection);
4. //一个线程最多可以挂起 MAXIMUM_SUSPEND_COUNT次,即127次
5. //线程1
6. unsigned threadID;
7. hThread1 = (HANDLE)_beginthreadex(NULL, 0, ThreadProc1, NULL, 0, &thr
eadID);
8. //线程2
9. unsigned threadID2;
10. hThread2 = (HANDLE)_beginthreadex(NULL, 0, ThreadProc2, NULL, 0, &
threadID2);
[cpp] view plain?
1. return 0;
[cpp] view plain?
1. unsigned __stdcall ThreadProc1(void* pParam)
2. {
3. //打印数字iCount
4. if(0 == m_gCount)
5. {
6. Sleep(2000);
7. }
8. while(1)
9. {
10. EnterCriticalSection(&m_gCriticalSection);
11. m_gCount++;
12. cout << "线程
一:" << m_gCount << endl; //两个线程函数中的的这句不注释掉,该程序在任务管理
中显示占用的CPU是不高的,但内核调用占用CPU很高
[cpp] view plain?
1. //若是注释掉,则程序在任务管
理器中显示占用的CPU就会很高
2. LeaveCriticalSection(&m_gCriticalSection);
3. //Sleep(1000);
4. }
5. return 0;
6. }
7. unsigned __stdcall ThreadProc2(void* pParam)
8. {
9. //打印数字iCount
10. while(1)
11. {
12. EnterCriticalSection(&m_gCriticalSection);
13. m_gCount++;
14. cout << "
" << m_gCount << endl;
另一线程:
15. LeaveCriticalSection(&m_gCriticalSection);
16. //Sleep(1000);
17. }
18. return 0;
19. }
发布评论