多線程執(zhí)行CPU過高問題
時(shí)間:
捷鋒774由 分享
多線程執(zhí)行CPU過高問題
在項(xiàng)目開發(fā)過程中使用到多線程技術(shù),有時(shí)程序運(yùn)行起來占用CPU很高(具體占用多少,跟你的CPU核數(shù)有關(guān)。CPU過高的問題,CPU多線程的問題,下面是學(xué)習(xí)啦小編帶來的關(guān)于多線程執(zhí)行CPU過高問題的內(nèi)容,歡迎閱讀!
多線程執(zhí)行CPU過高問題:
CPU占用高不高,跟你的線程數(shù)多少沒有太多的影響。因?yàn)槿裟鉉PU是雙核,即使只創(chuàng)建了2個(gè)子線程,而這兩個(gè)子線程是2個(gè)死循環(huán),此時(shí)你的CPU占用也會是相當(dāng)?shù)母叩摹?/p>
不信的可以直接試試。
CPU占用高不高也不能只看本程序運(yùn)行起來的CPU占用率,因?yàn)槿羰悄愕某绦蚴褂昧藘?nèi)核對象的調(diào)用,那么在任務(wù)管理器中你會看到你的程序占用CPU是不高的,但使用到內(nèi)核對象在內(nèi)核調(diào)用中的那些服務(wù)程序就會顯示CPU占用高。
- 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);
- return 0;
- unsigned __stdcall ThreadProc1(void* pParam)
- {
- //打印數(shù)字iCount
- if(0 == m_gCount)
- {
- Sleep(2000);
- }
- while(1)
- {
- EnterCriticalSection(&m_gCriticalSection);
- m_gCount++;
- <span string">"color:#ff0000;">cout << "線程一:" << m_gCount << endl; //兩個(gè)線程函數(shù)中的的這句不注釋掉,該程序在任務(wù)管理中顯示占用的CPU是不高的,但內(nèi)核調(diào)用占用CPU很高</span>
- <span string">"color:#ff0000;"> //若是注釋掉,則程序在任務(wù)管理器中顯示占用的CPU就會很高
- </span> LeaveCriticalSection(&m_gCriticalSection);
- //Sleep(1000);
- }
- return 0;
- }
- unsigned __stdcall ThreadProc2(void* pParam)
- {
- //打印數(shù)字iCount
- while(1)
- {
- EnterCriticalSection(&m_gCriticalSection);
- m_gCount++;
- <span string">"color:#ff0000;">cout << "另一線程:" << m_gCount << endl;
- </span> LeaveCriticalSection(&m_gCriticalSection);
- //Sleep(1000);
- }
- return 0;
- }
看了多線程執(zhí)行CPU過高問題文章內(nèi)容的人還看:
4.CPU的好壞
7.怎么看cpu好壞
8.CPU怎么查看