(一)大概念并发
gcd:使用起来就俩概念异步
1.任务(你想作的事)async
2.队列(存听任务)函数
gcd能够根据你的须要,将你的任务进行排序,来肯定何时执行。spa
(二)小概念(同步异步,并发串行都是啥)线程
同步:在当前线程中执行code
异步:在另外一条线程中执行排序
并发:多个任务并发执行队列
串行:一个任务执行完毕,再执行下个任务get
(三)上代码
1.任务执行方式
(1)用同步的方式执行任务(在当前线程执行当前任务)
dispatch_sync(dispatch_queue_t _Nonnull queue, ^(void)block) //1.队列名称 2.要执行的block(在里面写你要执行的任务)
(2)用异步的方式执行任务(开辟新线程执行当前任务)
dispatch_async(dispatch_queue_t _Nonnull queue, ^(void)block)//1.队列名称 2.要执行的block(在里面写你要执行的任务)
2.队列的类型
(1)并发队列
GCD默认已经提供了全局的并发队列,供整个应用使用,不须要手动建立
使用dispatch_get_global_queue函数得到全局的并发队列
dispatch_queue_t dispatch_get_global_queue(dispatch_queue_priority_t priority,unsigned long flags); // 此参数暂时无用,用0便可
第一个参数是优先级 ,第二个参数是之后用的,用0就好了
说明:全局并发队列的优先级
#define DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默认(中)
#define DISPATCH_QUEUE_PRIORITY_LOW (-2) // 低
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后台
(2)串行队列
1.使用dispatch_queue_create函数建立串行队列
dispatch_queue_t dispatch_queue_create(const char *label, dispatch_queue_attr_t attr); // 队列名称, 队列属性,通常用NULL便可
示例:
dispatch_queue_t queue = dispatch_queue_create("wendingding", NULL); // 建立 dispatch_release(queue); // 非ARC须要释放手动建立的队列
2. 使用主队列
主队列是GCD自带的一种特殊的串行队列,放在主队列中的任务,都会放到主线程中执行
使用dispatch_get_main_queue()得到主队列
我以为这张图总结的挺好的,只有在使用并发队列而且异步执行任务的状况下,所建立的任务才会并发执行
代码我也不写了,比较懒,有啥不懂的 直接问