目錄
1.1 概述
1.2 請求數(shù)據(jù)孤荣,主線程刷新
1.3 串行隊列
1.4 并行隊列
1.1 概述
1)CGD是基于C語言開發(fā)的一套多線程開發(fā)機制,也是目前蘋果官方推薦的多線程開發(fā)方法
2)GCD會自動管理線程的生命周期(創(chuàng)建線程须揣、調(diào)度任務(wù)盐股、銷毀線程),程序員只需要告訴GCD想要執(zhí)行什么任務(wù)耻卡,不需要編寫任何代碼管理線程
3)GCD是這三種多線程開發(fā)方式中抽象層次最高的疯汁,使用起來也是最為方便的,只是基于C語言開發(fā)劲赠,并不像前兩種是面向?qū)ο箝_發(fā)涛目,而是完全面向過程的
4)優(yōu)點,他對于多核運算更加有效凛澎,會自動利用更多的CPU內(nèi)核
5)GCD中也有類似于NSOperationQueue的隊列,GCD統(tǒng)一管理整個隊列中的任務(wù)估蹄,GCD中的隊列分為并行隊列和串行隊列兩類
串行隊列
只有一個線程塑煎,加入到隊列中的操作按添加順序執(zhí)行
并發(fā)隊列
有多個線程,操作進來以后會將這些線程安排在可用的處理器上臭蚁,同時保證先進來的任務(wù)優(yōu)先處理
有4個術(shù)語比較容易混淆:同步最铁、異步讯赏、并發(fā)、串行
同步和異步主要影響:能不能開啟新的線程
同步:只是在當(dāng)前線程中執(zhí)行任務(wù)冷尉,不具備開啟新線程的能力
異步:可以在新的線程中執(zhí)行任務(wù)漱挎,具備開啟新線程的能力
并發(fā)和串行主要影響:任務(wù)的執(zhí)行方式
并發(fā):允許多個任務(wù)并發(fā)(同時)執(zhí)行
串行:一個任務(wù)執(zhí)行完畢后,再執(zhí)行下一個任務(wù)
1.2 請求數(shù)據(jù)雀哨,主線程刷新
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//請求數(shù)據(jù)
NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"];
NSError * error;
NSString * data = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (data != nil) {
dispatch_async(dispatch_get_main_queue(), ^{
//返回主線程刷新界面
});
} else {
NSLog(@"error when download:%@", error);
}
});
1.3 串行隊列
dispatch_async(dispatch_get_main_queue(), ^{
sleep(2);
NSLog(@"main 2");
}); dispatch_async(dispatch_get_main_queue(), ^{
sleep(1);
NSLog(@"main 1");
}); dispatch_async(dispatch_get_main_queue(), ^{
sleep(3);
NSLog(@"main 3");
});
//后面會等前面的任務(wù)執(zhí)行完再執(zhí)行
1.4 并行隊列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
NSLog(@"異步1");
});
dispatch_group_async(group, queue, ^{
NSLog(@"異步2");
});
dispatch_group_async(group, queue, ^{
NSLog(@"異步3");
});
dispatch_group_async(group, queue, ^{
NSLog(@"異步4");
});
dispatch_group_notify(group, queue, ^{
NSLog(@"上面都執(zhí)行完磕谅,執(zhí)行這個");
});
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者