建立在 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 执行该脚本?
(是的,这是一项非常荒谬的任务。)
最佳答案
很可能您可以使用并发队列实现您想要的。将上述代码的一个实例添加到每个可用内核的队列中。然后这些实例中的每一个都应该并行运行 - 每个内核一个。
尽管您可能需要在主队列上运行一个,然后在并发队列上运行“cores - 1”个实例。
但最终您无法控制核心的使用方式。以上内容依赖于运行时为您充分利用可用内核。
关于swift - 我可以强制 Swift 代码使用所有内核吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41839948/