首页 文章

需要有关使用GCD将块添加到队列(objective-c)的建议

提问于
浏览
0

我有一个使用GCD的多线程功能的iPad应用程序 .

当我需要进行某种类型的后台处理时,我使用以下代码:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ -backgroundProcessing- }**

所以我的两个问题是:

1)由于我已将后台处理的 ALL 添加到同一队列,并且队列始终使FIFO出列,它们是否仍会同时运行?我假设他们会,但我不确定 .

2)根据Apple-Docs我已经知道了

系统为每个应用程序提供三个并发调度队列 . 这些队列对于应用程序是全局的,并且仅通过其优先级来区分 .

但是,由于我的处理不需要DISPATCH_QUEUE_PRIORITY_HIGH,DISPATCH_QUEUE_PRIORITY_LOW或DISPATCH_QUEUE_PRIORITY_BACKGROUND,建议将所有后台处理放在DISPATCH_QUEUE_PRIORITY_DEFAULT全局队列上/ ok / good practice / what-ever /吗?或者我应该开始创建自定义队列,以便我可以使用多个队列 . 而且,如果我创建更多队列,那么会有任何性能提升吗?

1 回答

  • 3

    1)不,全局队列在这方面起着特殊的作用 . 它们可以在不同的线程上同时执行多个块 . 如果您不关心排序,它们或多或少会有快速输入后台作业的方法(参见[1],提交给这些全局并发队列的块可以相互同时执行 . ) . 如果需要顺序排序,请为任务创建队列 . 它们非常轻巧,因此不会对性能产生很大影响 .

    2)正常任务的默认优先级应该没问题 . 在创建cpu负载密集型任务或更复杂的队列层次结构时,优先级会变得更加有趣(因为您可以将队列放入队列中) .

    PS:我绝对推荐WWDC 2010和2011年的GCD视频,因为他们对GCD的更具特色的部分提供了很多见解 .

    [1] http://developer.apple.com/library/ios/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html

相关问题