大中央调度(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文章中进行解释。但是在这里,我们需要区分一些对我们有帮助的主题:
同步与异步:
同步:
- 同步方法等待返回仍比返回完成的任务。
- 用于完成任务的同步块当前线程
异步:
- 立即异步返回,而无需等待完成的任务。
- 异步不阻止当前线程返回