大中央调度(GCD)第二部分

在第一部分中,我们介绍了串行和并发队列以及示例。在这一部分中,我们将详细介绍有关具有参数更改的并发队列的苹果,并学习如何创建全局队列,非活动队列,时间延迟,死锁。

让我们从我们离开的地方开始。

InactiveQueue:

在attribute参数中有另一个值initialInactive。因此,我们可以首先使非活动队列成为队列,当需要活动时,我们可以使它处于活动状态。

让我们将属性值并发更改为initialInactive,如下所示:

  let newQueue = DispatchQueue(标签:“ com.concurrent.ekram”,qos:DispatchQoS.background,属性:.initiallyInactive) 

并在并发函数的外部块中创建DispatchQueue的类属性:

  var inactiveQueue:DispatchQueue! 

现在在这样的函数中使用newQueue初始化不活动队列:

  inactiveQueue = newQueue 

现在,newQueue处于非活动状态,并且viewDidAppear不知道队列,因此需要在viewDidAppear中手动激活,如下所示:

 如果让队列= inactiveQueue { 
  queue.activate() 

}

现在,代码将以串行方式运行并执行队列。请参见屏幕和控制台:

最初不活动时如何使用并发:

属性参数很简单,请同时使用.initiallyInactive和的数组。 并发比队列最初也将处于非活动状态并发。

  let newQueue = DispatchQueue(标签:“ com.concurrent.ekram”,qos:DispatchQoS.background,属性:[。initiallyInactive,.concurrent]) 

现在的结果是:

因此,当我们使用active()方法在viewDidApper上同时运行时,newQueue最初也处于非活动状态并且是并发的。

创建全局队列:

我们已经知道如何使用property创建自定义队列。 实际上,我们不需要创建全局队列,因为GCD工程师已经为我们创建了全局队列。因此,我们可以像这样创建..

 让globalQueue = DispatchQueue.global() 

我们可以添加到全局队列方法

  globalQueue.async { 
 对于i in 0 .. <10 { 
 打印(“ Custom Green Love:Custom”,i) 
  } 
}

我们可以指定全局队列的质量

 让globalQueue = DispatchQueue.global(qos:.background) 

如果我们不指定qos,它将是默认的qos

即使我们可以创建一个队列,也可以使队列延迟在初始化时间之后开始,这仅是本文的全部内容。但是我们将在下一篇GCD文章中进行解释。但是在这里,我们需要区分一些对我们有帮助的主题:

同步与异步:

同步:

  1. 同步方法等待返回仍比返回完成的任务。
  2. 用于完成任务的同步块当前线程

异步:

  1. 立即异步返回,而无需等待完成的任务。
  2. 异步不阻止当前线程返回

谢谢如果您认为您从本文中学到了什么,请与我分享并鼓掌