学习啦 > 学习电脑 > 电脑硬件知识 > CPU知识 > 多线程执行CPU过高问题

多线程执行CPU过高问题

时间: 捷锋774 分享

多线程执行CPU过高问题

  在项目开发过程中使用到多线程技术,有时程序运行起来占用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, &threadID);  
  8.       
  9.     //线程2  
  10.     unsigned threadID2;  
  11.     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.   
  9.     while(1)  
  10.     {  
  11.         EnterCriticalSection(&m_gCriticalSection);  
  12.         m_gCount++;  
  13.         <span string">"color:#ff0000;">cout << "线程一:" << m_gCount << endl; //两个线程函数中的的这句不注释掉,该程序在任务管理中显示占用的CPU是不高的,但内核调用占用CPU很高</span>  
[cpp] view plain?
  1. <span string">"color:#ff0000;">                       //若是注释掉,则程序在任务管理器中显示占用的CPU就会很高  
  2. </span>       LeaveCriticalSection(&m_gCriticalSection);  
  3.           
  4.         //Sleep(1000);  
  5.     }  
  6.   
  7.     return 0;  
  8. }  
  9.   
  10. unsigned __stdcall ThreadProc2(void* pParam)  
  11. {  
  12.     //打印数字iCount  
  13.     while(1)  
  14.     {  
  15.         EnterCriticalSection(&m_gCriticalSection);  
  16.         m_gCount++;  
  17.         <span string">"color:#ff0000;">cout << "另一线程:" << m_gCount << endl;   
  18. </span>       LeaveCriticalSection(&m_gCriticalSection);  
  19.           
  20.         //Sleep(1000);  
  21.     }  
  22.   
  23.     return 0;  
  24. }  

看了多线程执行CPU过高问题文章内容的人还看:

1.CPU专业名词详解

2.cpu双核心四线程什么意思

3.cpu线程数是什么

4.CPU的好坏

5.CPU的处理技术有哪些

6.C#习题大全(2)

7.怎么看cpu好坏

8.CPU怎么查看


 

608919