全局隊(duì)列異步任務(wù)
//獲取全局隊(duì)列
let globle = DispatchQueue.global()
for i in 1...10 {
//依次添加異步任務(wù),先添加的先執(zhí)行
print("任務(wù)\(i)開(kāi)始 線程===\(Thread.current)")
globle.async {
let j = arc4random_uniform(UInt32(5))//隨機(jī)一個(gè)時(shí)間
sleep(j)//耗時(shí)任務(wù)
print("任務(wù)\(i)完成,耗時(shí)\(j)秒,線程==\(Thread.current)")
}
print("測(cè)試函數(shù)執(zhí)行順序")
}
任務(wù)1開(kāi)始 線程===<NSThread: 0x60c00006f800>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)2開(kāi)始 線程===<NSThread: 0x60c00006f800>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)3開(kāi)始 線程===<NSThread: 0x60c00006f800>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)4開(kāi)始 線程===<NSThread: 0x60c00006f800>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)5開(kāi)始 線程===<NSThread: 0x60c00006f800>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)6開(kāi)始 線程===<NSThread: 0x60c00006f800>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)7開(kāi)始 線程===<NSThread: 0x60c00006f800>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)8開(kāi)始 線程===<NSThread: 0x60c00006f800>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)9開(kāi)始 線程===<NSThread: 0x60c00006f800>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)10開(kāi)始 線程===<NSThread: 0x60c00006f800>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)3完成,耗時(shí)1秒,線程==<NSThread: 0x60000007da00>{number = 3, name = (null)}
任務(wù)5完成,耗時(shí)1秒,線程==<NSThread: 0x6080002752c0>{number = 4, name = (null)}
任務(wù)7完成,耗時(shí)1秒,線程==<NSThread: 0x608000266200>{number = 5, name = (null)}
任務(wù)10完成,耗時(shí)1秒,線程==<NSThread: 0x600000261300>{number = 6, name = (null)}
任務(wù)2完成,耗時(shí)2秒,線程==<NSThread: 0x60800007f800>{number = 7, name = (null)}
任務(wù)9完成,耗時(shí)3秒,線程==<NSThread: 0x608000278500>{number = 9, name = (null)}
任務(wù)8完成,耗時(shí)3秒,線程==<NSThread: 0x600000261580>{number = 8, name = (null)}
任務(wù)1完成,耗時(shí)4秒,線程==<NSThread: 0x608000274900>{number = 10, name = (null)}
任務(wù)4完成,耗時(shí)4秒,線程==<NSThread: 0x6000002644c0>{number = 11, name = (null)}
任務(wù)6完成,耗時(shí)4秒,線程==<NSThread: 0x60800026a8c0>{number = 12, name = (null)}
全局隊(duì)列里的異步任務(wù)會(huì)開(kāi)啟新的線程,哪個(gè)任務(wù)先完成就先返回,不會(huì)阻塞全局隊(duì)列
全局隊(duì)列同步任務(wù)
//獲取全局隊(duì)列
let globle = DispatchQueue.global()
for i in 1...10 {
//依次添加同步任務(wù),先添加的先執(zhí)行
print("任務(wù)\(i)開(kāi)始 線程===\(Thread.current)")
globle.sync {
let j = arc4random_uniform(UInt32(5))//隨機(jī)一個(gè)時(shí)間
sleep(j)//耗時(shí)任務(wù)
print("任務(wù)\(i)完成,耗時(shí)\(j)秒,線程==\(Thread.current)")
}
print("測(cè)試函數(shù)執(zhí)行順序")
}
任務(wù)1開(kāi)始 線程===<NSThread: 0x608000079fc0>{number = 1, name = main}
任務(wù)1完成,耗時(shí)1秒,線程==<NSThread: 0x608000079fc0>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序任務(wù)2開(kāi)始 線程===<NSThread: 0x608000079fc0>{number = 1, name = main}
任務(wù)2完成,耗時(shí)3秒,線程==<NSThread: 0x608000079fc0>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序任務(wù)3開(kāi)始 線程===<NSThread: 0x608000079fc0>{number = 1, name = main}
任務(wù)3完成,耗時(shí)3秒,線程==<NSThread: 0x608000079fc0>{number = 1, name = main}測(cè)試函數(shù)執(zhí)行順序
任務(wù)4開(kāi)始 線程===<NSThread: 0x608000079fc0>{number = 1, name = main}
任務(wù)4完成,耗時(shí)4秒,線程==<NSThread: 0x608000079fc0>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)5開(kāi)始 線程===<NSThread: 0x608000079fc0>{number = 1, name = main}
任務(wù)5完成,耗時(shí)4秒,線程==<NSThread: 0x608000079fc0>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)6開(kāi)始 線程===<NSThread: 0x608000079fc0>{number = 1, name = main}
任務(wù)6完成,耗時(shí)1秒,線程==<NSThread: 0x608000079fc0>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)7開(kāi)始 線程===<NSThread: 0x608000079fc0>{number = 1, name = main}
任務(wù)7完成,耗時(shí)1秒,線程==<NSThread: 0x608000079fc0>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)8開(kāi)始 線程===<NSThread: 0x608000079fc0>{number = 1, name = main}
任務(wù)8完成,耗時(shí)3秒,線程==<NSThread: 0x608000079fc0>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)9開(kāi)始 線程===<NSThread: 0x608000079fc0>{number = 1, name = main}
任務(wù)9完成,耗時(shí)3秒,線程==<NSThread: 0x608000079fc0>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
任務(wù)10開(kāi)始 線程===<NSThread: 0x608000079fc0>{number = 1, name = main}任務(wù)10完成,耗時(shí)4秒,線程==<NSThread: 0x608000079fc0>{number = 1, name = main}
測(cè)試函數(shù)執(zhí)行順序
全局隊(duì)列里的同步任務(wù),沒(méi)有開(kāi)啟新線程,不會(huì)立即返回,執(zhí)行完以后才會(huì)進(jìn)行下一個(gè)任務(wù)
這里比較常見(jiàn)的用法就是這樣:
DispatchQueue.global().async {
//這里完成耗時(shí)任務(wù)
DispatchQueue.main.async {
//回到主線程刷新UI
}
}