昨天我們分別介紹完了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會開啟新的執行緒,且工作也會同時進行,所以是執行工作最快的方式。
那今天差不多介紹到這裡啦~我們明天見!