gpt4 book ai didi

ios - DispatchQueue 同步并发

转载 作者:搜寻专家 更新时间:2023-11-01 05:34:23 24 4
gpt4 key购买 nike

好吧,我已经经历了大量的问题和答案,我知道对它的理解,但是当我尝试一些代码时,我得到了一些不符合这些理论的结果。

目前我的理解:

  1. Sync:一旦 block 内的所有任务都被执行,控制将返回。
  2. 异步:控制将在 block 被击中后立即返回。

这是看起来不错的部分。现在是棘手的部分

  1. 串行:任务将在 block 内以串行方式执行。Q1:这是否适用于 block 内的任务?因为它已经在所有场景中发生。同样对于同步串行队列,在不同的 block 中添加任务并不重要,因为一旦第一个任务完成,控制就会返回。

例如-

 let syncQ = DispatchQueue(label:"xyz") // by default it is serial
syncQ.sync{
for _ in 0...10{
print("ABC")
}
}

syncQ.sync{
for _ in 0...10{
print("XYZ")
}
}

预期输出:ABC * 10,XYZ * 10这很好。

现在当我引入并发串行 Q 时,输出是相同的。所以我的问题是并发队列说任务将同时或并发完成,但它并没有发生。

例如-

let syncConc = DispatchQueue(label:"con",attributes:.concurrent)
syncConc.sync{
for _ in 0...10{
print("XYZ")
}

for _ in 0...10{
print("ABC")
}

}


syncConc.sync{
for _ in 0...10{
print("HHH")
}

for _ in 0...10{
print("XXX")
}

}

输出:XYZ *10 ,ABC*10, HHH*10, XXX*10

所以看起来同步并发队列,就像串行队列一样,并且进行并发操作的唯一方法是如果我们在操作之间抛出一个异步队列。所以由此我无法理解,并发类型的串行队列的目的是什么。

如果有人能提供代码示例,将不胜感激,因为我已经知道它的理论和工作原理。非常感谢。

最佳答案

问题是您混淆了队列类型和执行模型。

有串行队列和并发队列,您可以将任务分配给两种类型,同步或异步。

队列可以是:

  • 串行 -> 一次只执行一个任务
  • 并发 -> 可以同时运行多个任务

我们可以将任务提交到队列:

  • 同步 -> 调用者需要等到任务返回
  • 异步 -> 调用者代码无需等待任务完成即可重新获得控制权

总结一下:

  • 队列的串行或并发类型决定了它是否可以同时执行一个或多个任务
  • 同步或异步安排任务确定调用者的代码何时重新获得控制权

关于ios - DispatchQueue 同步并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44429221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com