一、简单介绍
1.什么是GCD?
全称是Grand Central Dispatch,可译为“牛逼的中枢调度器”
纯C语言,提供了非常多强大的函数
2.GCD的优势
GCD是苹果公司为多核的并行运算提出的解决方案
GCD会自动利用更多的CPU内核(比如双核、四核)
GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码
二、任务和队列
GCD中有2个核心概念
(1)任务:执行什么操作
(2)队列:用来存放任务
GCD的使用就2个步骤
(1)定制任务
(2)确定想做的事情
将任务添加到队列中,GCD会自动将队列中的任务取出,放到对应的线程中执行
提示:任务的取出遵循队列的FIFO原则:先进先出,后进后出.
三、代码实现
(废话不对,代码是最合适理解的)
/**************** 串并行队列 ***********************/
// 队列
// 创建一个队列
// 参数1 队列标识 参数2 队列类型 (CONCURRENT并行, SERIAL串行)
dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
// 添加任务 异步
dispatch_async(queue, ^{
for (int i = 0; i < 5; i++) {
NSLog(@"任务1 ---> %d", i);
}
});
dispatch_async(queue, ^{
for (int i = 0; i < 5; i++) {
NSLog(@"任务2 ---> %d", i);
}
});
*/
/*
// 添加任务, 同步 (阻塞主线程)
dispatch_sync(queue, ^{
for (int i = 0; i < 5; i++) {
NSLog(@"同步任务1 ---> %d", i);
sleep(1);
}
});
*/
/************* 全局队列 *****************/
dispatch_queue_t queue_globel = dispatch_get_global_queue(0, 0);
dispatch_async(queue_globel, ^{
for (int i = 0; i < 5; i++) {
NSLog(@"全局队列 ---> %d", i);
}
// 下载网络任务
// 属性 UI
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"开始刷新把");
// 一般刷新 UI 使用此队列�
});
});
for (int i = 0; i < 5; i++) {
NSLog(@"主线程---> %d", i);
}