Swift命令行工具中的多个工作程序

Swift命令行工具中的多个工作程序,第1张

概述在Swift中编写命令行工具(CLT)时,我想处理大量数据.我已经确定我的代码受CPU限制,性能可以从使用多个内核中受益.因此,我想并行化部分代码.说我想实现以下伪代码: Fetch items from databaseDivide items in X chunksProcess chunks in parallelWait for chunks to finishDo some ot 在Swift中编写命令行工具(CLT)时,我想处理大量数据.我已经确定我的代码受cpu限制,性能可以从使用多个内核中受益.因此,我想并行化部分代码.说我想实现以下伪代码:
Fetch items from databasedivIDe items in X chunksProcess chunks in parallelWait for chunks to finishDo 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如何实现?

我错误地解释了挂起程序的锁定线程.没有运行循环,工作将执行得很好.问题中的代码运行正常,并阻止主线程直到整个组完成.

所以说块包含4项工作负载,下面的代码包含4个并发工作者,然后等待所有工作完成:

let group = dispatch_group_create()let queue = dispatch_queue_create("",queue) {        do_work(chunk)    }}dispatch_group_wait(group,disPATCH_TIME_FOREVER)
总结

以上是内存溢出为你收集整理的Swift命令行工具中的多个工作程序全部内容,希望文章能够帮你解决Swift命令行工具中的多个工作程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1051305.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存