由于代码是在iOS上进行测试的,所以仅供参考
//首先是cpu运算的函数
void func() {
sqrt(rand());//进行开方运算
}
//建立获取基准时间
static inline uint64_t nanos_to_abs(uint64_t nanos) {
return nanos * timebase_info.denom / timebase_info.numer;
}
//在本函数中,大家可以根据需要去将CPU压力分配到多个线程中
void cpu_stress_threads(double percentage, int thread_count) {
for (int i = 0; i < thread_count; i++) {
cpu_stress(percentage/thread_count);
}
}
//CPU加压函数
void cpu_stress(double percentage) {//我们首先传入希望达到的CPU占比
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
mach_timebase_info(&timebase_info);//基准时间校准
});
dispatch_queue_t queue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue2, ^{//开辟线程执行加压动作
uint64_t bias = 0;
while (true) {//死循环持续加压,这里大家可以自行添加停止的时机
uint64_t t1, t2, t3, t, delay;
t1 = mach_absolute_time();
uint64_t sliceEnd = t1 + nanos_to_abs(1e7);//一个时间片为10ms
do {
//占用cpu的函数
func();
t2 = mach_absolute_time();
}
while(t2 < sliceEnd);//执行10ms的CPU持续运行
t = t2 - t1;
delay = t * ( 1.0 / percentage - 1.0);
delay -= bias;
mach_wait_until(mach_absolute_time() + delay);//执行对应比例的CPU休息时间
t3 = mach_absolute_time();
bias = (t3 - t2) - delay;//将代码执行的时间损耗计入休息时间
}
});
}
如果觉得《cpu压力 测试软件 破坏测试工具——CPU压力》对你有帮助,请点赞、收藏,并留下你的观点哦!