Swift4中使用GCD----全局隊(duì)列

全局隊(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
            }
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容