一、簡(jiǎn)單介紹
1.什么是GCD?
全稱是Grand Central Dispatch,可譯為“牛逼的中樞調(diào)度器”
純C語言,提供了非常多強(qiáng)大的函數(shù)
2.GCD的優(yōu)勢(shì)
GCD是蘋果公司為多核的并行運(yùn)算提出的解決方案
GCD會(huì)自動(dòng)利用更多的CPU內(nèi)核(比如雙核、四核)
GCD會(huì)自動(dòng)管理線程的生命周期(創(chuàng)建線程、調(diào)度任務(wù)、銷毀線程)
程序員只需要告訴GCD想要執(zhí)行什么任務(wù),不需要編寫任何線程管理代碼
二、任務(wù)和隊(duì)列
GCD中有2個(gè)核心概念
(1)任務(wù):執(zhí)行什么操作
(2)隊(duì)列:用來存放任務(wù)
GCD的使用就2個(gè)步驟
(1)定制任務(wù)
(2)確定想做的事情
將任務(wù)添加到隊(duì)列中,GCD會(huì)自動(dòng)將隊(duì)列中的任務(wù)取出,放到對(duì)應(yīng)的線程中執(zhí)行
提示:任務(wù)的取出遵循隊(duì)列的FIFO原則:先進(jìn)先出,后進(jìn)后出.
三、代碼實(shí)現(xiàn)
(廢話不對(duì),代碼是最合適理解的)
/**************** 串并行隊(duì)列 ***********************/
// 隊(duì)列
// 創(chuàng)建一個(gè)隊(duì)列
// 參數(shù)1? 隊(duì)列標(biāo)識(shí)? ? 參數(shù)2? 隊(duì)列類型 (CONCURRENT并行, SERIAL串行)
dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
// 添加任務(wù)? 異步
dispatch_async(queue, ^{
for (int i = 0; i < 5; i++) {
NSLog(@"任務(wù)1 ---> %d", i);
}
});
dispatch_async(queue, ^{
for (int i = 0; i < 5; i++) {
NSLog(@"任務(wù)2 ---> %d", i);
}
});
*/
/*
// 添加任務(wù), 同步 (阻塞主線程)
dispatch_sync(queue, ^{
for (int i = 0; i < 5; i++) {
NSLog(@"同步任務(wù)1 ---> %d", i);
sleep(1);
}
});
*/
/************* 全局隊(duì)列 *****************/
dispatch_queue_t queue_globel = dispatch_get_global_queue(0, 0);
dispatch_async(queue_globel, ^{
for (int i = 0; i < 5; i++) {
NSLog(@"全局隊(duì)列 ---> %d", i);
}
// 下載網(wǎng)絡(luò)任務(wù)
// 屬性 UI
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"開始刷新把");
// 一般刷新 UI 使用此隊(duì)列?
});
});
for (int i = 0; i < 5; i++) {
NSLog(@"主線程---> %d", i);
}