昨天我們用程式碼介紹完四種組合,想必大家對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天的不離不棄,如果有緣,我們明年見!