iOS 多线程 - GCD

Grand Central Dispatch,“牛逼的中枢调度器”,纯C语言,提供了非常多强大的函数。
GCD是多核并行运算解决方案 ,自动利用更多的CPU内核(比如双核、四核),会自动管理线程的生命周期(创建线程、调度任务、销毁线程)

一、使用步骤

GCD中有2个核心概念
(1)任务:执行什么操作
(2)队列:用来存放任务

GCD的使用就2个步骤
(1)定制任务
(2)确定想做的事情
将任务添加到队列中,GCD会自动将队列中的任务取出,放到对应的线程中执行
提示:任务的取出遵循队列的FIFO原则:先进先出,后进后出

二、基本属性

1.GCD中有2个用来执行任务的函数

(1)用同步的方式执行任务 dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
同步:在当前线程中执行任务,不具备开启新线程的能力
(2)用异步的方式执行任务 dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
异步:在新的线程中执行任务,具备开启新线程的能力

参数说明:
queue:队列 block:任务
串行队列:一个任务执行完毕后,再执行下一个任务
并发队列:多个任务并发(同时)执行

2.串行队列

GCD中获得串行有2种途径
(1)使用dispatch_queue_create函数创建串行队列

    dispatch_queue_t queue = dispatch_queue_create("shile", NULL);

(2)使用主队列(主线程执行的队列)

    dispatch_queue_t mainQueue = dispatch_get_main_queue();

3.并发队列

GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建
使用dispatch_get_global_queue函数获得全局的并发队列

    dispatch_queue_t newQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

三、代码示例

1.GCD使用示例

https://github.com/shileseal/SLGCDDemo

四、总结

同步函数不具备开启线程的能力,无论是什么队列都不会开启线程;异步函数具备开启线程的能力,开启几条线程由队列决定(串行队列只会开启一条新的线程,并发队列会开启多条线程)。

同步函数
(1)并发队列:不会开线程
(2)串行队列:不会开线程

异步函数
(1)并发队列:能开启N条线程
(2)串行队列:开启1条线程

异步函数具备开线程的能力,但不一定会开线程

你可能感兴趣的:(iOS开发)