gpt4 book ai didi

swift - 使用 BrightFutures 控制并行性,Swift 中的 "future"实现

转载 作者:行者123 更新时间:2023-11-28 07:04:12 25 4
gpt4 key购买 nike

BrightFutures 是 Swift 语言中“ future ”的一个很好的实现。 https://github.com/Thomvis/BrightFutures

我喜欢用它来控制多核CPU的并行度。有人知道控制要使用的 CPU 内核/物理线程数量的方法吗?

最佳答案

所有传递给 BrightFutures 的闭包都是根据 BF 的 default threading model 执行的.看起来您想偏离默认模型。这可以通过传递 custom execution context 来实现。 .

可以使用以下函数创建限制其执行的并行任务数量的执行上下文:

func executionContextWithControlledParallelism(p: Int) -> ExecutionContext {
let s = Semaphore(value: p)
let q = Queue.global.context
return { task in
s.wait()
q {
task()
s.signal()
}
}
}

我使用以下代码对此进行了简要测试:

let context = executionContextWithControlledParallelism(5)

for _ in 0..<100 {
future(context:context) { () -> Int in
return fibonacci(Int(arc4random_uniform(15)))
}
}

您必须将 context 传递给每个要限制其并行性的 mapflatMap 等。我承认这看起来很麻烦。更好的方法(BrightFutures 当前支持)是设置默认线程模型,如下所示:

let context = executionContextWithControlledParalelism(5)

// this is not supported right now:
BrightFutures.setDefaultThreadingModel(model: {
return context
})

如果你喜欢这个,请考虑提交一个问题来请求这个或者(甚至更好)创建一个拉取请求。

关于swift - 使用 BrightFutures 控制并行性,Swift 中的 "future"实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31217821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com