CPU 사용률 및 CPU 사용률 계산
설명
우리는 개발 중에 응용 프로그램이 차지하는 CPU 비율과 CPU 사용률을 읽어야 할 수도 있다.이 글은 주로 이 두 가지 이용률의 개념과 이 두 가지 이용률을 어떻게 얻는지 소개한다.
cpu 총량 = 본 응용 프로그램이 차지하는 공간 + 기타 응용 프로그램이 차지하는 공간 + 빈 공간
응용 프로그램 점유율: 본 응용 프로그램이 있는 cpu의 점유율 cpu의 사용률: 현재 핸드폰 cpu의 사용률 = 본 응용 프로그램의 사용률 + 기타 응용 프로그램의 사용률
코드
1. 응용 프로그램이 차지하는 cpu의 백분율 가져오기: 다음 라이브러리를 가져옵니다.
#import <mach/mach.h>
세부 코드:
/** * Get cpu usage app level * * @return cpu usage */
+ (float)getCpuUsageAppLevel
{
kern_return_t kr;
task_info_data_t tinfo;
mach_msg_type_number_t task_info_count;
task_info_count = TASK_INFO_MAX;
kr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)tinfo, &task_info_count);
if (kr != KERN_SUCCESS) {
return -1;
}
task_basic_info_t basic_info;
thread_array_t thread_list;
mach_msg_type_number_t thread_count;
thread_info_data_t thinfo;
mach_msg_type_number_t thread_info_count;
thread_basic_info_t basic_info_th;
uint32_t stat_thread = 0; // Mach threads
basic_info = (task_basic_info_t)tinfo;
// get threads in the task
kr = task_threads(mach_task_self(), &thread_list, &thread_count);
if (kr != KERN_SUCCESS) {
return -1;
}
if (thread_count > 0)
stat_thread += thread_count;
long tot_sec = 0;
long tot_usec = 0;
float tot_cpu = 0;
int j;
for (j = 0; j < thread_count; j++)
{
thread_info_count = THREAD_INFO_MAX;
kr = thread_info(thread_list[j], THREAD_BASIC_INFO,
(thread_info_t)thinfo, &thread_info_count);
if (kr != KERN_SUCCESS) {
return -1;
}
basic_info_th = (thread_basic_info_t)thinfo;
if (!(basic_info_th->flags & TH_FLAGS_IDLE)) {
tot_sec = tot_sec + basic_info_th->user_time.seconds + basic_info_th->system_time.seconds;
tot_usec = tot_usec + basic_info_th->user_time.microseconds + basic_info_th->system_time.microseconds;
tot_cpu = tot_cpu + basic_info_th->cpu_usage / (float)TH_USAGE_SCALE * 100.0;
}
} // for each thread
kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t));
assert(kr == KERN_SUCCESS);
return tot_cpu;
}
우리는 xcode의 cpu 이용 비율과 비교할 수 있는데, 그 값은 비교적 가깝다.
2. 휴대폰 cpu의 사용률 1) 주 스레드에서 다음 라이브러리 가져오기를 계산합니다.
#import <mach/mach.h>
#import <sys/sysctl.h>
#import <sys/types.h>
#import "AppCalculator.h"
선언해야 하는 속성:
processor_info_array_t _cpuInfo, _prevCPUInfo;
mach_msg_type_number_t _numCPUInfo, _numPrevCPUInfo;
unsigned _numCPUs;
/** * Get cpu usage phone level * * @return cpu usage */
- (float)getCpuUsagePhoneLevel
{
float cpuusageRes = 0.00f;
int _mib[2U] = { CTL_HW, HW_NCPU };
size_t _sizeOfNumCPUs = sizeof(_numCPUs);
int _status = sysctl(_mib, 2U, &_numCPUs, &_sizeOfNumCPUs, NULL, 0U);
if(_status)
_numCPUs = 1;
// _cpuUsageLock = [[NSLock alloc] init];
natural_t _numCPUsU = 0U;
kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &_numCPUsU, &_cpuInfo, &_numCPUInfo);
if(err == KERN_SUCCESS) {
// [_cpuUsageLock lock];
for(unsigned i = 0U; i < _numCPUs; ++i) {
Float32 _inUse, _total;
if(_prevCPUInfo) {
_inUse = (
(_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER])
+ (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM])
+ (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE])
);
_total = _inUse + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]);
} else {
_inUse = _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE];
_total = _inUse + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE];
}
if (_total != 0) {
cpuusageRes += _inUse / _total;
}
// NSLog(@"Core : %u, Usage: %.2f%%", i, _inUse / _total * 100.f);
}
// [_cpuUsageLock unlock];
if(_prevCPUInfo) {
size_t prevCpuInfoSize = sizeof(integer_t) * _numPrevCPUInfo;
vm_deallocate(mach_task_self(), (vm_address_t)_prevCPUInfo, prevCpuInfoSize);
}
_prevCPUInfo = _cpuInfo;
_numPrevCPUInfo = _numCPUInfo;
_cpuInfo = nil;
_numCPUInfo = 0U;
} else {
// NSLog(@"Error!");
}
return cpuusageRes * 100;
}
2) cpu 이용률을 계산하는 코드를 비주 라인에 넣고 코드 연결을 계산한다http://download.csdn.net/download/smiling8866/9475124코드에서 먼저 호출-(void)createCpuusagePhoneLevel 방법으로 cpu 이용률을 계산한 다음에 호출-(float)getcpuusagePhoneLevel 방법으로 값을 받아야 합니다.주의: 코드 이상 등 세부 사항을 주의하십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
CPU와 GPU의 차이 및 장치 확인(Ubuntu 기준)CPU는 컴퓨터의 두뇌를 담당한다. 다양한 환경에서의 작업을 빠르게 수행하기 위해 ALU()의 구조가 복잡하고 명령어 하나로 처리할 수 없는 기능도 많으며 각종 제어 처리를 위한 부분이 많다. 반면, GPU는 특화된...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.