繁体   English   中英

GCD与自定义队列

[英]GCD vs custom queue

我想知道两者之间的性能差异是什么。

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在OS和其他应用程序中使用,它将需要执行非常快速的后台任务并快速完成。 创建的自定义队列与GCD是分开的,它们可以运行不同的任务,一旦释放,它们将被添加回池中。 因此,我的假设是,对于复杂的操作,我的customQueue的性能要优于GCD。

你怎么看? 哪个表现更好? 他们是一样的吗?

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

  1. 某些功能(尤其是调度屏障)在全局队列中不可用,因此,如果需要这些功能,则需要使用自定义队列。

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

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

好吧,您无需说明_myCustomConcurrentQueue的创建方式(它可以是串行队列或并发队列),但是假设它是并发队列,那么就全局而言,它的优先级可能与全局并发队列不同。 GCD从其内部的“队列队列”阻止列表中分派块或函数,并以为执行该工作而创建的线程的实际线程优先级为准!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM