GCD
是苹果提出的多线程并行运算的高效解决方案,GCD能自动利用CPU多个内核,自动管理线程的生命周期;
API一般以dispatch为前缀,例如常用的dispatch_async
任务
GCD中的任务使用block来执行,例如下面代码是创建异步执行一个任务:
dispatch_async(queue, ^{
// block里放异步执行的任务代码
});
队列(Queue)
指执行任务的等待队列,既用来存放任务的队列。
队列是一张特殊的表,采用FIFO(先进先出)的原则,
新任务总是排在队列的末尾,读取任务则是从队列的头部开始。
队列分两种:串行队列 和 并发队列
两者都符合FIFO(先进先出)的原则
两者的区别是:执行顺序不同,开启的线程数不同。
队列分主线程队列和全局并发队列(背景线程队列)
主线程队列
dispatch_queue_t queue = dispatch_get_main_queue();
在主线程中执行的Dispatch Queue,因为主线程只有一个,所以主线程队列是串行队列。
追加到主线程队列的处理在主线程的RunLoop中执行。
全局并发队列
有四个优先级:高优先级、默认优先级、低优先级、后台优先级
dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
优先级越高,代表在全局并发队列中优先执行
参数1:队列优先级
参数2:保留参数,用 0 即可
执行
GCD执行任务有两种方式:同步执行 和 异步执行
两者的区别是:是否等待队列的任务执行结束,是否开启新的线程
同步执行调用dispatch_sync方法
异步执行调用dispatch_async方法