在Swift中编写命令行工具(CLT)时,我想处理大量数据.我已经确定我的代码受cpu限制,性能可以从使用多个内核中受益.因此,我想并行化部分代码.说我想实现以下伪代码:
Fetch items from database Divide items in X chunks Process chunks in parallel Wait for chunks to finish Do some other processing (single-thread)
现在我一直在使用GCD,一个天真的方法看起来像这样:
let group = dispatch_group_create() let queue = dispatch_queue_create("",DISPATCH_QUEUE_CONCURRENT) for chunk in chunks { dispatch_group_async(group,queue) { worker(chunk) } } dispatch_group_wait(group,DISPATCH_TIME_FOREVER)
但是GCD需要一个运行循环,因此代码将挂起,因为组永远不会执行. runloop可以使用dispatch_main()启动,但它永远不会退出.也可以在几秒钟内运行NSRunLoop,但这不是一个可靠的解决方案.无论GCD如何,使用Swift如何实现?