【从零开始的Swift开发心路历程-Day29】认识GCD多执行绪Part2

昨天我们分别介绍完了SerialQueue、ConcurrentQueue、Synchronous、Asynchronous,今天就来看看使用程序码後的执行结果会如何吧!

sync(同步) SerialQueue

let serialQueue = DispatchQueue(label: "serialQueue")
        serialQueue.sync {
            for i in 1...5{
                print("?",i)
            }
        }
        for i in 11...15{
            print("?",i)
        }

执行结果

我们可以看到,因为是同步伫列,不会开启新的执行绪,因此只在主执行绪执行,所以要等同步伫列?执行完才会执行?for回圈

async(非同步) SerialQueue

let serialQueue = DispatchQueue(label: "serialQueue")
        serialQueue.async {
            for i in 1...5{
                print("?",i)
            }
        }
        for i in 11...15{
            print("?",i)
        }

执行结果

由於非同步伫列会开启新的执行绪,但是是SerialQueue,所以会等执行完位於主执行绪的?for回圈才会执行非同步伫列?

sync(同步) ConcurrentQueue

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)
            }
        }

执行结果

因为是同步伫列,不会开启新的执行绪,因此只在主执行绪执行,所以还是依照顺序,执行完?才会执行?

async(非同步) ConcurrentQueue

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会开启新的执行绪,且工作也会同时进行,所以是执行工作最快的方式。
那今天差不多介绍到这里啦~我们明天见!


<<:  Day 29 不停的探索新知

>>:  【Day 29】Class

[Day18] 被纠察吗?

写在前面 Google 推出的服务主要分两块 Google Workspace 和 Google C...

【左京淳的JAVA学习笔记】第七章 API

API(application program interface)是指程序之间具有特定规范的接口。...

Day 6 Compose UI Shape + Composable

今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~ 今天目标:...

Day6 建立 Next.js 专案 - 使用 create-next-app

今天我们要来建立 Next.js 专案,目标是能在自己电脑上成功开启 Next.js 网页。 我预设...

day 27 - 持续改善, 持续优化, 持续重构

今天的你和去年的你写出来的程序会是一样的吗? 程序语言会不断地更新迭代,不断地有新的功能或套件出现,...