/**
* GCD Grand Central Dispatch 伟大的中枢调度器
优势
1. 为多核的并行运算提出的解决方案
2. 自动利用更多的CPU内核
3. 自动管理线程的生命周期 (创建线程 调用任务 销毁线程)
4. 程序员只需告诉GCD想要干什么
*/
// 任务 和 队列?
// 任务 : 执行什么操作
// 队列 : 用来存放任务
// GCD的使用
/**
* 1. 定制任务
2. 将任务添加到队列中
GCD会自动将队列的任务取出,放入到对应的线程中执行
任务的取出 FIFO原则
*/
// GCD的函数
/**
* dispatch_sync (dispath_queue_t queue,dispatch_block_t block);
queue 队列
- 并发队列 (自动开启多个线程同时执行任务) 并发功能只能在异步函数才有效
- 串行队列 (让任务一个接着一个执行)
队列只决定任务的执行方式
block 任务
dispatch_async (dispath_queue_t queue,dispatch_block_t block);
*/
// 同步 异步 区别
// 同步:只能在当前线程中执行任务,不具备开启新线程的能力
// 异步:只能在当前线程中执行任务,具备开启新线程的能力
<pre name="code" class="objc">- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// dispatch_sync 同一条线 同步 不具备开启线程的能力
// dispatch_async 同一条线 异步 不具备开启线程的能力
// 队列 不是决定你要不要开线程,它只是执行方式
// 获的全局的并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// 将任务添加到全局队列中去异步执行
dispatch_async(queue, ^{
NSLog(@" --- download %@",[NSThread currentThread]);
// 子线程中执行
});
dispatch_async(queue, ^{
NSLog(@" --- download1 %@",[NSThread currentThread]);
// 子线程中执行
});
dispatch_async(queue, ^{
NSLog(@" --- download2 %@",[NSThread currentThread]);
// 子线程中执行
});
dispatch_async(queue, ^{
NSLog(@" --- download3 %@",[NSThread currentThread]);
// 子线程中执行
});
}