在previous question上构建,我需要一个可以占用0%到100%之间百分比的程序,然后大致利用机器的CPU,以便测试触发的服务当使用了一定量的CPU时。我已经编写了一些可以为单个核心执行此操作的Swift代码:
// workInterval is the fraction of CPU to use, between 0 (none) and 1 (all).
let workInterval: TimeInterval = <utilization>
let sleepInterval: UInt32 = UInt32((1 - workInterval) * 1_000_000)
let startDate = Date()
var sleepDate = Date()
while startDate.timeIntervalSinceNow > -<time> {
if sleepDate.timeIntervalSinceNow < (workInterval * -1) {
print("Sleep")
usleep(sleepInterval)
sleepDate = Date()
}
}
对于60%的利用率,它基本上检查我们的if
条件0.6秒,然后重复睡眠0.4秒。这适用于代码运行的任何单个核心,但我需要在计算机上的所有核心上运行。在Swift中有什么办法吗?我最好用另一种语言编写代码并通过Swift执行该脚本吗?
(是的,这是我给出的一项非常荒谬的任务。)
答案 0 :(得分:2)
您最有可能通过并发队列实现所需。将上述代码的一个实例添加到每个可用核心的队列中。然后每个实例应该并行运行 - 每个核心一个。
虽然您可能需要在主队列上运行一个然后运行&#34;核心 - 1&#34;并发队列上的实例。
但最终你无法控制核心的利用方式。以上内容依赖于运行时为您充分利用可用内核。