我可以强制使用Swift代码来使用所有内核吗?

时间:2017-01-24 22:14:45

标签: swift multithreading cpu

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执行该脚本吗?

(是的,这是我给出的一项非常荒谬的任务。)

1 个答案:

答案 0 :(得分:2)

您最有可能通过并发队列实现所需。将上述代码的一个实例添加到每个可用核心的队列中。然后每个实例应该并行运行 - 每个核心一个。

虽然您可能需要在主队列上运行一个然后运行&#34;核心 - 1&#34;并发队列上的实例。

但最终你无法控制核心的利用方式。以上内容依赖于运行时为您充分利用可用内核。