iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0
Mobile Development

從零開始的Swift開發心路歷程系列 第 30

【從零開始的Swift開發心路歷程-Day30】認識GCD多執行緒Part3(完)

【從零開始的Swift開發心路歷程-Day30】認識GCD多執行緒Part3(完)

昨天我們用程式碼介紹完四種組合,想必大家對GCD有更進一步的瞭解了,那假設我們想讓GCD的執行緒有優先順序的話該怎麼辦呢?
答案很簡單,Swift裡有一個Enumeration叫做DispatchQoS.QoSClass,這裡定義了執行緒的執行先後順序
優先權由高到低如下:
userInteractive > userInitiated > default > utility > background > unspecified

除了自己定義queue,也可以使用系統定義好的global queue,預設是concurrent,可以使用qos跟sync或async的屬性

我們以async的情況下來說,優先權高的執行緒會先被執行,而當優先權相同時則會輪流執行

優先權有高低順序

let queue1 = DispatchQueue.global(qos: .userInteractive)
let queue2 = DispatchQueue.global(qos: .background)
let queue3 = DispatchQueue.global(qos: .userInitiated)
    queue1.async {
        for i in 1...5{
            print("?",i)
        }
    }
    queue2.async {
        for i in 11...15{
            print("?",i)
        }
    }
    queue3.async {
        for i in 101...105{
            print("?",i)
        }
    }

執行結果

由於?的優先權高於?,而?的優先權最低,所以處理順序是?>?>?

優先權相同

let queue1 = DispatchQueue.global(qos: .userInteractive)
let queue2 = DispatchQueue.global(qos: .userInteractive)
let queue3 = DispatchQueue.global(qos: .userInteractive)
    queue1.async {
        for i in 1...5{
            print("?",i)
        }
    }
    queue2.async {
        for i in 11...15{
            print("?",i)
        }
    }
    queue3.async {
        for i in 101...105{
            print("?",i)
        }
    }

執行結果

那我們GCD就介紹到這邊啦~當然GCD還有很多更深入的東西,就讓各位自己去發掘啦
終於完成這次的鐵人賽啦~感謝大家這30天的不離不棄,如果有緣,我們明年見!


上一篇
【從零開始的Swift開發心路歷程-Day29】認識GCD多執行緒Part2
系列文
從零開始的Swift開發心路歷程30

尚未有邦友留言

立即登入留言