ios - 故意造成 CPU 使用率过高

标签 ios swift

我有一个其他人通常会遇到问题的问题。

我正在构建一个测量电池放电的应用程序。

我的计划是模拟高 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 秒后停止): enter image description here

不过要小心!您的设备可能会过热

关于ios - 故意造成 CPU 使用率过高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71700495/

相关文章:

ios - 在 iOS 中更新 SQlite 版本

ios - iOS 10 中的 UIActivityViewController

ios - 解析错误代码 206 : Cannot modify user (Parse Server)

ios - 以编程方式向 Swift 3 中的 ScrollView 添加约束

ios - 使用 swift 3 将数组添加到 Realm

ios - 用进度圈动画更新 uilabel 百分比 swift

iphone - 如何在 iPhone 中使用 DES 加密 NSString 值?

ios - 在 UITableView 单元格中加载 UITableView 的最佳方法是什么?

swift - 类型 'Category'(aka 'OpaquePointer')的值没有成员 'name'

ios - 视频可以从浏览器播放,但不能在电影播放器​​上播放 -SWIFT