GCD简介
2017-02-22 本文已影响21人
遥远不是北_
GCD简介
什么是GCD
-
全称是Grand Central Dispatch
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并行任务。在Mac OS X 10.6雪豹中首次推出,也可在IOS 4及以上版本使用。--引自 百度 -
纯C语言的,提供了非常多强大的函数.
GCD的优势
- GCD是苹果公司为多核的并行运算提出的解决方案.
- GCD会自动利用更多的CPU内核(比如双核、四核)
- GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程).
- 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码.
GCD的核心
将任务添加到队列
- 任务 : 执行什么操作
- 队列 : 用来存放任务
GCD使用的两个步骤
-
创建任务 : 确定要做的事情GCD中的任务是使用BLOCK封装的.
-
将任务添加到队列中GCD会自动将队列中的任务取出,放到对应的线程中执行.
-
任务的取出遵循队列的FIFO原则 : 先进先出,后进后出.
代码演练
将任务添加到队列
- (void)Demo
{
// 全局并发队列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
// 任务
void (^task)() = ^ {
NSLog(@"%@",[NSThread currentThread]);
};
// 同步任务
//dispatch_sync(queue, task);
// 异步任务 : 每次执行任务的线程不一定是一样的
dispatch_async(queue, task);
NSLog(@"end");
}
- 简写
- (void)Demo
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"%@",[NSThread currentThread]);
});
}
总结 : 与 NSThread 的对比
- 所有的代码写在一起的,让代码更加简单,易于阅读和维护
- NSThread 通过 @selector 指定要执行的方法,代码分散
- GCD 通过 block 指定要执行的代码,代码集中
- 使用 GCD 不需要管理线程的创建/销毁/复用的过程.程序员不用关心线程的生命周期
- 如果要开多个线程 NSThread 必须实例化多个线程对象
- NSThread 靠 NSObject 的分类方法实现的线程间通讯,GCD 靠 block