多线程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!
它出现的宗旨就是替代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
- 多线程GCD初级讲解,队列与同步异步区别
- iOS 同步 异步 并发 并行 多线程的讲解与区别
- GCD同步与异步,串行与并行深入讲解
- IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- iOS学习笔记74-IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别附代码
- GCD 主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- GCD网络多线程---同步执行,异步执行,串行队列,并行队列
- 关于GCD 队列,同步异步的理解
- iOS GCD dispatch多线程 同步异步
- 多线程:同步与异步
- GCD编程dispatch_sync(同步)和dispatch_async(异步)方式执行并发队列任务区别
- iOS GCD/主队列/并行队列/全局队列/串行队列/同步任务/异步任务区别 含代码
- GCD使用 串行并行队列 与 同步异步执行的各种组合 及要点分析
- GCD使用 串行并行队列 与 同步异步执行的各种组合 及要点分析
- GCD(一) ---- 进程、线程、队列、同步、异步 概念区分与使用
- 多线程的同步和异步讲解案例
- 同步与异步区别
- 互斥 同步 异步 并发 多线程的区别与联系
- 解决CL.exe退出,以及error LNK1104关于opencv_calib3d*.lib问题
- 基于树的查找--------------平衡二叉查找树 2012-08-06 11:14:53
- 求二叉树的深度
- Java图形化绘制
- 最好的单例模式
- 多线程GCD初级讲解,队列与同步异步区别
- 支持向量机通俗导论(理解SVM的三层境界)
- autoresizingMask
- 转载:天涯——散文天下——《乡下的狗》——作者:南方孤驴
- HDOJ 2087 剪花布条
- 华为2016机试题目
- Centos/Linux下如何查看网关地址/Gateway地址
- Dell R810 + Centos5 + MD3200
- JQuery select与radio的取值与赋值