BrightFutures 是 Swift 语言中“未来”的一个很好的实现。 https://github.com/Thomvis/BrightFutures
我喜欢用它来控制多核 CPU 的并行度。有人知道控制要使用的 CPU 内核/物理线程数的方法吗?
BrightFutures 是 Swift 语言中“未来”的一个很好的实现。 https://github.com/Thomvis/BrightFutures
我喜欢用它来控制多核 CPU 的并行度。有人知道控制要使用的 CPU 内核/物理线程数的方法吗?
传递给 BrightFutures 的所有闭包都根据 BF 的默认线程模型执行。您似乎想偏离默认模型。这可以通过传递自定义执行上下文来实现。
可以使用以下函数创建限制其执行的并行任务数量的执行上下文:
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
每个map
,等。flatMap
我承认这看起来很麻烦。更好的方法(BrightFutures 目前不支持)是设置默认线程模型,如下所示:
let context = executionContextWithControlledParalelism(5)
// this is not supported right now:
BrightFutures.setDefaultThreadingModel(model: {
return context
})
如果你喜欢这个,请考虑提交一个问题来请求这个,或者(甚至更好)创建一个拉请求。