//什么是GCD
//全称Grand Central Dispatch
//纯C语言,提供强大的函数
//GCD的优势
//GCD是苹果公司为多核的并行运算提供的解决方案
//GCD会自动利用更多的CPU内核(比如双核四核)
//GCD会自动管理线程的生命周期(创建线程,调度任务,销毁线程)
//
//GCD中有2个核心概念
//任务:执行什么操作
//队列:用来存放任务
//GCD的使用就2个步骤
//定制任务:确定想要做什么事情
//将任务添加到队列中
//GCD会自动将队列中的任务取出,放到对应的线程中执行
//任务的取出遵循队列的FIFO原则:先进先出,后进后出
//先导入库libdispatch 默认的
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//queue:队列
//block 任务
//将任务添加到队列里去
// 队列类型分为两大类
// 并发队列(Concurrent Dispatch Queue)
// 可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务)
// 并发功能只有在异步(dispatch_async)函数下才有效
// 串行队列(Serial Dispatch Queue)
// 让任务一个接着一个地执行(一个执行完毕才到下一个)
// 同步和异步主要影响:能不能开启新的线程
// 同步:只有在当前线程中执行任务,不具备开启新的线程能力
// 异步:可以在新的线程中执行任务,具备开启新线程的能力
//
// 并发和串行主要影响:任务的执行方式
// 并发:允许多个任务并发(同时)执行
// 串行:一个任务执行完毕后,再执行下一个任务
//第一步 创建一个并发队列
//label:相当于队列的名字
//第二个参数:队列类型,并发DISPATCH_QUEUE_CONCURRENT队列
dispatch_queue_t queue = dispatch_queue_create("com.520.queue", DISPATCH_QUEUE_CONCURRENT);
//第二不 将任务加入队列
dispatch_async(queue, ^{
for (NSInteger i = 0; i < 10; i++) {
NSLog(@"1-----%@",[NSThread currentThread]);
}
});//异步
// 异步,可以在新的线程中执行任务,具备开启新线程的能力
dispatch_async(queue, ^{
for (NSInteger i = 0; i < 10; i++) {
NSLog(@"2-----%@",[NSThread currentThread]);
}
});
dispatch_async(queue, ^{
for (NSInteger i = 0; i < 10; i++) {
NSLog(@"3-----%@",[NSThread currentThread]);
}
});
// 利用GCD开启线程:这是其一种组合情况,异步函数搞并发队列
// 由于你是异步具备开启新线程的能力,
// 由于是并发允许多个任务并发(同时)执行
// dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)//同步
//同步 只有在当前线程中执行任务,不具备开启新线程的能力
}