我有一个其他人通常会遇到问题的问题。
我正在构建一个测量电池放电的应用程序。
我的计划是模拟高 CPU 使用率,然后测量电池电量下降到一定水平所需的时间。
如何故意导致 CPU 使用率较高,但又不阻塞 UI?
我可以做这样的事情吗?
DispatchQueue.global(qos: .background).async { [weak self] in
guard let self = self else { return }
for _ in 0..<Int.max {
while self.isRunning {
}
break
}
}
最佳答案
您想要的是 CPU 上的持久负载,同时加载 CPU 的线程数 >= CPU 数。
所以类似
DispatchQueue.concurrentPerform(iterations: 100) { iteration in
for _ in 1...10000000 {
let a = 1 + 1
}
}
地点:
- 将
iterations
设置为 100 的concurrentPerform
可确保我们使用每个可用线程并行运行。当然,这有点过分了,4 个线程足以让四核上的每个 CPU 都忙碌起来,而 iOS 通常为每个进程分配的最大线程数约为 10 个。但 100 只会让你后悔,这真的发生了) 1...10000000
使循环变得非常非常长let a = 1 + 1
让 CPU 有事可做。
在我的 iPhone 8 模拟器上运行此代码创建了这样的图片(大约 30 秒后停止):
不过要小心!您的设备可能会过热
关于ios - 故意造成 CPU 使用率过高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71700495/