GCD与自定义队列

时间:2014-02-26 00:24:06

标签: ios objective-c multithreading cocoa-touch grand-central-dispatch

我想知道这两者之间的性能差异。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

    // perform complex operation

    // dispatch back to main thread to update UI

});



dispatch_async(_myCustomConcurrentQueue, ^{

    // perform complex operation

    // dispatch back to main thread to update UI

});

我的假设是在整个操作系统和其他应用程序中使用GCD,它需要执行非常快速的后台任务,并且快速完成。创建的自定义队列与GCD是分开的,它们可以运行不同的任务,并在释放后添加回池中。所以我的假设是我的customQueue比复杂操作的GCD表现更好。

你有什么想法?哪个表现更好?它们是一样的吗?

3 个答案:

答案 0 :(得分:9)

虽然理论上高优先级全局队列可能更快(因为您不必创建队列,稍微不同的线程优先级),但它与您自己的自定义并发队列之间的差异不太可能是可观察的。但是,有两个原因可能是您想要使用自己的自定义队列:

  1. 某些功能,特别是调度障碍,在全局队列中不可用,因此如果您需要这些功能,则需要使用自定义队列。

  2. 调试您的应用程序,使用您自己的具有有意义名称的队列也很有用,这样您就可以更轻松地识别调试器中的各个线程。

  3. 但是,选择高优先级全局并发队列与自定义并发队列没有重要的性能原因。

答案 1 :(得分:1)

好吧,你没有说明如何创建_myCustomConcurrentQueue(它可能是一个串行队列或并发队列),但假设它是一个并发队列,那么它可能具有与全局并发队列不同的优先级,两者都在GCD如何从其内部“队列队列”阻止列表以及为完成工作而创建的线程的实际线程优先级中调度块或函数的术语!

请阅读dispatch_queue_create(3)手册页并特别注意“GLOBAL CONCURRENT QUEUES”部分。它包含了一些关于这个确切主题的非常有用的措辞(在这里剪切和粘贴太多)。

答案 2 :(得分:0)

我很确定如果你创建自己的队列,它最终会被添加到幕后的GCD中。我想这更像是一种偏好。