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

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

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

最佳答案

很可能您可以使用并发队列实现您想要的。将上述代码的一个实例添加到每个可用内核的队列中。然后这些实例中的每一个都应该并行运行 - 每个内核一个。

尽管您可能需要在主队列上运行一个,然后在并发队列上运行“cores - 1”个实例。

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

关于swift - 我可以强制 Swift 代码使用所有内核吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41839948/

相关文章:

java - Spring 的多线程

linux-kernel - 如果 cpu 正在运行进程,谁在运行内核?

c++ - 将核心分配给流程的好处

gpu - 为什么我们使用 CPU 而不是 GPU 进行光线追踪?

ios - 正则表达式中应该转义什么字符

swift - 将数据从 Arduino 发送到应用程序

c++ - 将数据传递给 C++ winsock 应用程序中的另一个线程

Java:在我自己的 API 中有哪些事件通知选项?

ios - 如何创建在触发功能时通过的测试?

swift - 为什么不可变对象(immutable对象)的属性在 Swift 中是可变的?