使用BrightFutures控制并行性,这是"未来"在Swift中实现

时间:2015-07-04 06:51:16

标签: swift parallel-processing multicore concurrent.futures

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

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

1 个答案:

答案 0 :(得分:1)

传递给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
})

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