CriticalSection 의 CPU 점유율을 어떻게 구해야할까.
MYDN2008. 9. 3. 15:17
일단, 생각할 수 있는 가장 간단한 코드로 구해본 CPU 점유율
CRITICAL_SECTION cs;
InitializeCriticalSection(&cs);
DWORD prvTick=GetTickCount();
for(int i = 0; i<1000000; i++)
{
EnterCriticalSection(&cs);
Sleep(0);
LeaveCriticalSection(&cs);
}
DWORD curTick = GetTickCount() - prvTick;
위의 코드에서
CS를 썼을 때에는 0.78초
CS를 안썼을 때에는 0.81초의 TickCount가 반환
즉, CS의 점유율이 100만번 호출에 0.03 초라는 계산.
위의 코드에서도,
사실 정확히 하려면 쓰레드의 KernelTime과 UserTime 을 구해 더해야하겠지만,
ns로 반환되는 KernelTime/UserTime 의 오차율이 ms를 상회하는 약 0.06초 이므로 의미가 없다.
멀티 쓰레드 환경에서의 점유율도 구해야하겠지만 귀찮으므로 pass.