多线程执行CPU过高问题
捷锋分享
在项目开发过程中使用到多线程技术,有时程序运行起来占用CPU很高(具体占用多少,跟你的CPU核数有关。CPU过高的问题,CPU多线程的问题,下面是学习啦小编带来的关于多线程执行CPU过高问题的内容,欢迎阅读!
多线程执行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++;
- <span style="color:#ff0000;">cout << "线程一:" << m_gCount << endl; //两个线程函数中的的这句不注释掉,该程序在任务管理中显示占用的CPU是不高的,但内核调用占用CPU很高</span>
- <span style="color:#ff0000;"> //若是注释掉,则程序在任务管理器中显示占用的CPU就会很高
- </span> LeaveCriticalSection(&m_gCriticalSection);
- //Sleep(1000);
- }
- return 0;
- }
- unsigned __stdcall ThreadProc2(void* pParam)
- {
- //打印数字iCount
- while(1)
- {
- EnterCriticalSection(&m_gCriticalSection);
- m_gCount++;
- <span style="color:#ff0000;">cout << "另一线程:" << m_gCount << endl;
- </span> LeaveCriticalSection(&m_gCriticalSection);
- //Sleep(1000);
- }
- return 0;
- }
看了多线程执行CPU过高问题文章内容的人还看:
4.CPU的好坏
7.怎么看cpu好坏
8.CPU怎么查看