日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多线程执行CPU过高问题

發(fā)布時(shí)間:2024/4/11 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程执行CPU过高问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在項(xiàng)目開發(fā)過程中使用到多線程技術(shù),有時(shí)程序運(yùn)行起來占用CPU很高(具體占用多少,跟你的CPU核數(shù)有關(guān)。若是單核,可能直接100%),應(yīng)該以release版本的運(yùn)行的情況為準(zhǔn)(因?yàn)槿羰嵌鄠€(gè)子線程間的阻塞沒處理好,可能調(diào)試過程中查看的CPU占用并不高)。這種問題,一般都是在多線程的處理中,有死循環(huán)了。

解決辦法:

找到所有的線程處理函數(shù)并在入口打上斷點(diǎn),耐心的一步步調(diào)試,只要堅(jiān)信問題的存在,最后總是會(huì)找出問題的。

?

CPU占用高不高,跟你的線程數(shù)多少?zèng)]有太多的影響。因?yàn)槿裟鉉PU是雙核,即使只創(chuàng)建了2個(gè)子線程,而這兩個(gè)子線程是2個(gè)死循環(huán),此時(shí)你的CPU占用也會(huì)是相當(dāng)?shù)母叩摹?/p>

不信的可以直接試試。

CPU占用高不高也不能只看本程序運(yùn)行起來的CPU占用率,因?yàn)槿羰悄愕某绦蚴褂昧藘?nèi)核對(duì)象的調(diào)用,那么在任務(wù)管理器中你會(huì)看到你的程序占用CPU是不高的,但使用到內(nèi)核對(duì)象在內(nèi)核調(diào)用中的那些服務(wù)程序就會(huì)顯示CPU占用高。

[cpp]?view plaincopyprint?
  • int?_tmain(int?argc,?_TCHAR*?argv[])??
  • {??
  • ????InitializeCriticalSection(&m_gCriticalSection);??
  • ????//一個(gè)線程最多可以掛起?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);??
  • [cpp]?view plaincopyprint?
  • return?0;??
  • [cpp]?view plaincopyprint?
  • unsigned?__stdcall?ThreadProc1(void*?pParam)??
  • {??
  • ????//打印數(shù)字iCount??
  • ????if(0?==?m_gCount)??
  • ????{??
  • ????????Sleep(2000);??
  • ????}??
  • ??
  • ????while(1)??
  • ????{??
  • ????????EnterCriticalSection(&m_gCriticalSection);??
  • ????????m_gCount++;??
  • ????????<span?style="color:#ff0000;">cout?<<?"線程一:"?<<?m_gCount?<<?endl;?//兩個(gè)線程函數(shù)中的的這句不注釋掉,該程序在任務(wù)管理中顯示占用的CPU是不高的,但內(nèi)核調(diào)用占用CPU很高</span>??
  • [cpp]?view plaincopyprint?
  • <span?style="color:#ff0000;">???????????????????????//若是注釋掉,則程序在任務(wù)管理器中顯示占用的CPU就會(huì)很高??
  • </span>???????LeaveCriticalSection(&m_gCriticalSection);??
  • ??????????
  • ????????//Sleep(1000);??
  • ????}??
  • ??
  • ????return?0;??
  • }??
  • ??
  • unsigned?__stdcall?ThreadProc2(void*?pParam)??
  • {??
  • ????//打印數(shù)字iCount??
  • ????while(1)??
  • ????{??
  • ????????EnterCriticalSection(&m_gCriticalSection);??
  • ????????m_gCount++;??
  • ????????<span?style="color:#ff0000;">cout?<<?"另一線程:"?<<?m_gCount?<<?endl;???
  • </span>???????LeaveCriticalSection(&m_gCriticalSection);??
  • ??????????
  • ????????//Sleep(1000);??
  • ????}??
  • ??
  • ????return?0;??
  • }??
  • 總結(jié)

    以上是生活随笔為你收集整理的多线程执行CPU过高问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。