昨天我们分别介绍完了SerialQueue、ConcurrentQueue、Synchronous、Asynchronous,今天就来看看使用程序码後的执行结果会如何吧!
let serialQueue = DispatchQueue(label: "serialQueue")
serialQueue.sync {
for i in 1...5{
print("?",i)
}
}
for i in 11...15{
print("?",i)
}
执行结果
我们可以看到,因为是同步伫列,不会开启新的执行绪,因此只在主执行绪执行,所以要等同步伫列?执行完才会执行?for回圈
let serialQueue = DispatchQueue(label: "serialQueue")
serialQueue.async {
for i in 1...5{
print("?",i)
}
}
for i in 11...15{
print("?",i)
}
执行结果
由於非同步伫列会开启新的执行绪,但是是SerialQueue,所以会等执行完位於主执行绪的?for回圈才会执行非同步伫列?
let concurrentQueue = DispatchQueue(label: "concurrentQueue",attributes: .concurrent)
concurrentQueue.sync {
for i in 1...5{
print("?",i)
}
}
concurrentQueue.sync {
for i in 11...15{
print("?",i)
}
}
执行结果
因为是同步伫列,不会开启新的执行绪,因此只在主执行绪执行,所以还是依照顺序,执行完?才会执行?
let concurrentQueue = DispatchQueue(label: "concurrentQueue",attributes: .concurrent)
concurrentQueue.async {
for i in 1...5{
print("?",i)
}
}
concurrentQueue.async {
for i in 11...15{
print("?",i)
}
}
concurrentQueue.async {
for i in 101...105{
print("?",i)
}
}
执行结果
我们可以看到非同步伫列会开启新的执行绪,且会依序「开始」执行
根据以上四种组合,我们可以得知async ConcurrentQueue会开启新的执行绪,且工作也会同时进行,所以是执行工作最快的方式。
那今天差不多介绍到这里啦~我们明天见!
写在前面 Google 推出的服务主要分两块 Google Workspace 和 Google C...
API(application program interface)是指程序之间具有特定规范的接口。...
今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~ 今天目标:...
今天我们要来建立 Next.js 专案,目标是能在自己电脑上成功开启 Next.js 网页。 我预设...
今天的你和去年的你写出来的程序会是一样的吗? 程序语言会不断地更新迭代,不断地有新的功能或套件出现,...