iOS GCD:全局队列和具有后台优先级(DISPATCH_QUEUE_PRIORITY_BACKGROUND)的全局队列之间的区别?

尼拉夫·巴特

我正在阅读《并发编程指南》,这使我感到困惑。

对于任何后台任务,我看到很多代码调用以下代码:

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

现在,我所说的“背景”是流行的意思:

除了主(UI)线程以外的任何地方都可以执行的东西

因此在文档之后,以上语句将返回具有不同优先级的任何非主线程队列。

我的问题是-为什么会DISPATCH_QUEUE_PRIORITY_BACKGROUND存在?最近,我还看到许多异步任务DISPATCH_QUEUE_PRIORITY_BACKGROUND专门用于执行后台任务。

如果使用来返回队列,它们不是不是用返回的队列DISPATCH_QUEUE_PRIORITY_DEFAULTDISPATCH_QUEUE_PRIORITY_LOW还是DISPATCH_QUEUE_PRIORITY_HIGH不在主线程之外运行dispatch_get_global_queue

他们不是后台队列吗?DISPATCH_QUEUE_PRIORITY_BACKGROUND服务返回的队列有什么特定目的我已经提到了这一点,但是除了上面提到的流行含义之外,它并没有太多说明。

我确定我对单词-背景和背景队列感到很困惑。如果有人可以解释(更好,以图形方式)-将会有很大的帮助。

gnasher729

如果您有许多后台任务,则设备中的一个或多个CPU将在所有这些任务之间共享。在大多数情况下,这样做是正确的。如果任务花费的时间太长,则可以通过提高效率来解决问题。

在极少数情况下,您可能需要花费很长时间才能完成任务,但是可以等待它。因此,您将其作为背景优先级。如果有任何工作要以“正常”优先级进行,则将首先完成该工作,并且仅当有备用CPU做其他事情时,才会执行Background任务。并且存在具有高优先级的队列;该队列中的任务将首先执行;如果一个特定的任务需要尽快完成,即使这意味着其他任务被延迟了,您也会这样做

从编程逻辑的角度来看,所有三个队列都是相同的。它只会影响操作系统首先尝试完成的任务,而不必关心那么多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档