/**
GCD属于“并发”技术,程序员在开发的时候,不需要关心线程
GCD是C语言的
只需要将 “任务” 添加到 “队列” 就可以了。
*任务,是使用 block 来定义的
-同步任务 - 没有创建线程的能力,如果派发同步任务,无论在什么队列上,都不会创建线程
-异步任务 - 有创建线程的能力
使用GCD不面对线程,通常“异步”是多线程的代名词。
*队列
-串行队列 顺序执行-》队列中的所有任务依次执行,最多只能创建“一条线程”
dispatch_queue_create(“itcast”, DISPATCH_QUEUE_SERIAL);
-并发队列 同时执行 -> 队列中的任务不需要顺序执行,可以开启多条线程,具体开启线程数量由GCD底层决定的,具体数量程序员不能参与
-主队列 -》在”主线程”上调度任务,所有任务都不能开线程
使用主队列的目的,是为了实现线程间通讯!
-全局队列,苹果为了方便程序员使用,提供的全局队列
全局队列,本质上就是并发队列!
程序员自行创建的并发队列和全局队列的区别:能够指定队列的名称!
在商业级应用程序开发时,会有一个系统崩溃报告!可以记录住程序闪退时的信息,自动发送给开发商,便于及时修正错误!
开发商可以根据队列的名称,快速判断出哪里出的问题!
注意事项:如果开发MRC的程序,同时是自行创建的队列,需要记住:
使用:dispatch_release(q);释放相应创建的gcd对象
* 串行队列和并发队列的选择
串行队列:最多只能开启一条线程,所有任务顺序执行
- 如果对效率要求不高,对任务执行顺序要求比较高,可以使用串行队列
- 如果要省电,应该用串行队列
并发队列:可以开启多条线程(多个任务同时执行),所有任务随机执行
- 如果对效率要求高,对任务执行顺序要求不高,可以使用并发队列
- 对电量消耗不在乎,可以使用并发队列
* 开发中的多数选择
耗时的操作:全局队列+异步任务
线程间通讯:主队列+异步任务
*/
pragma mark - GCD演练
/**
串行队列,同步任务,开发中不用
*/
- (void)gcdDemo1
{
// 1. 队列
/**
GCD的函数都是以dispatch开头的,在GCD语言的框架中,定义对象的时候 _t结尾
dispatch 派发任务
queue 队列
serial 串行
sync 同步任务
*/
dispatch_queue_t q = dispatch_queue_create("itcast", DISPATCH_QUEUE_SERIAL);
// 2. 在q队列上派发同步任务,任务内容就是block