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



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

当我需要做一些类型的后台处理时,我使用以下代码:

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

所以我的两个问题是:

1)由于我已将所有的后台处理添加到同一队列,并且队列总是脱队列FIFO,它们仍然会并发运行吗?我想他们会的,但我不确定。

根据Apple-Docs,我已经知道

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

但是,由于我的处理不需要DISPATCH_QUEUE_PRIORITY_HIGH, DISPATCH_QUEUE_PRIORITY_LOW或DISPATCH_QUEUE_PRIORITY_BACKGROUND,是否可取/ok/良好实践/无论如何/将所有后台处理放在DISPATCH_QUEUE_PRIORITY_DEFAULT全局队列上?或者我应该开始创建自定义队列,以便我可以有多个使用。而且,如果我确实创建了更多的队列,是否会有性能提升?

1)不,全局队列在这里有特殊的作用。它们可以在不同的线程上并发地执行多个块。如果你不关心顺序,它们或多或少是为了快速进入后台任务(参见[1],提交给这些全局并发队列的块可以相对于彼此并发执行。)。如果需要顺序排序,请为任务创建一个队列。它们非常轻,因此不会对性能产生很大的影响。

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

PS:我绝对推荐2010年和2011年WWDC的GCD视频,因为它们对GCD的更具体部分提供了一些见解。

[1] http://developer.apple.com/library/ios/文档/性能/引用/GCD_libdispatch_Ref/引用/reference.html

最新更新