多线程GCD初级讲解,队列与同步异步区别

来源:互联网 发布:买家怎样取消淘宝客 编辑:程序博客网 时间:2024/06/06 05:00
GCD 全程Crand Central Dispatch 是由苹果公司开发的技术,以优化应用程序支持多核心处理器和其他的对称多处理系统的系统
它出现的宗旨就是替代NSThread等多线程API,优点就是不用开发人员再去手动管理线程的生命周期,且更加充分的利用设备的多核
所以在我们移动开发中,使用的频率还是很多的
GCD的库的使用是 libdispatch  由于使用GCD的时候是动态调用的.所以不需要我们手动导入
其实GCD 的操作核心 就三步: 1.制定任务  2.将任务放入队列当中 3.执行
:制定任务,简单说就是需要执行的代码段
:队列 大致分为两种  1.串行 2.并发  他们决定了任务的执行方式
串行:即一个任务执行完毕后,再执行下一个任务
并发:可以多个任务共同执行
下面我们来说一下队列的方法

总结一下:所有接收队列的类型 都是   dispatch_queue_t 的,关键字:主队列:get_main 全局:get_global 别的都是dispatch_queue_create  且后面的参数2 :就是要创建队列的类型
      (如果在MRC,即手动管理内存,需要释放,只有在create时,才需要release,即dispatch_release(队列名),而ARC下不用写)
好了.必备的前两步已经说明完毕,下面说一下 执行
执行:分为两种: 1. 同步  2. 异步   同步跟异步的实质只是决定要不要开辟新的线程
同步:在原有的线程(如果没开过,那么就是在主线程执行)中执行.不会开辟新的线程,那么就意味并发失去了意义,
异步:在执行时开辟一个新的线程     那么要想使用并发,就必须用异步喽,要记住!
到了这里一定要区分开  异步同步   还有  串行并发 的区别
再次声明,重要事情说三遍!!!!!   -_-!
异步 跟 同步  只是决定要不要开辟新的线程
串行 跟 并发  决定了任务的执行方式

那么我们先来更加直观的看一下 异步状态下 串行与并发的区别
我们可以在控制台看见打印的结果

结果number 分别为 2.3.4 说明是并行,即在异步的状态下并发,分别执行各自的任务,各自开辟各自的线程.所以是2.3.4
我们可以在控制台看见打印的结果

结果number 都是=2 的,因为是异步状态下串行,所以一个执行完毕后在执行下一个,所以不需要在开辟线程
亲们可以自己实践一下 同步状态下的   并发 与 串行 (这里就不写了)
我们会发现.同步状态下.并发失去了意义,依然会在当前线程执行任务
那么同步状态下的串行,更不用说了.本本分分的在当前线程执行任务
好了,就到这里,希望大家能彻底了解GCD!


0 0