GCD 使用中需要注意的细节以及容易混淆的知识点

全称是Grand Central Dispatch,可译为“牛逼的中枢调度器”,纯C语言,提供了非常多强大的函数。GCD是苹果公司为多核的并行运算提出的解决方案,GCD会自动利用更多的CPU内核(比如双核、四核),GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程),程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码。

有4个术语比较容易混淆:同步、异步、并发、串行:

同步和异步决定了要不要开启新的线程

同步:在当前线程中执行任务,不具备开启新线程的能力

异步:在新的线程中执行任务,具备开启新线程的能力

并发和串行决定了任务的执行方式

并发:多个任务并发(同时)执行

串行:一个任务执行完毕后,再执行下一个任务

使用代码测试同步异步的结果:

(1)用异步函数往并发队列中添加任务  总结:同时开启三个子线程

(2)用异步函数往串行队列中添加任务  总结:会开启线程,但是只开启一个线程

(3)用同步函数往并发队列中添加任务  总结:不会开启新的线程,并发队列失去了并发的功能

(4)用同步函数往串行队列中添加任务  总结:不会开启新的线程

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

同步函数

(1)并发队列:不会开线程

(2)串行队列:不会开线程

异步函数

(1)并发队列:能开启N条线程

(2)串行队列:开启1条线程

补充:

凡是函数中,各种函数名中带有create\copy\new\retain等字眼,都需要在不需要使用这个数据的时候进行release。

GCD的数据类型在ARC的环境下不需要再做release。

CF(core Foundation)的数据类型在ARC环境下还是需要做release。

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

时间: 2024-11-05 13:32:57

GCD 使用中需要注意的细节以及容易混淆的知识点的相关文章

Android文件存储使用参考

可能遇到的问题 android系统自身自带有存储,另外也可以通过sd卡来扩充存储空间.前者好比pc中的硬盘,后者好移动硬盘. 前者空间较小,后者空间大,但后者不一定可用. 开发应用,处理本地数据存取时,可能会遇到这些问题: 需要判断sd卡是否可用: 占用过多机身内部存储,容易招致用户反感,优先将数据存放于sd卡; 应用数据存放路径,同其他应用应该保持一致,应用卸载时,清除数据: 标新立异在sd卡根目录建一个目录,招致用户反感 用户卸载应用后,残留目录或者数据在用户机器上,招致用户反感 数据安全性

(转)从“如何设计用户超过1亿的应用”说起—数据库调优实战

摘要:如果企业计划构建高性能的SaaS应用,仅凭云服务基础设施是不够的.如何基于云服务平台设计并实施符合自身业务特点的系统架构,是决定产品性能的关键.本文将讲述我们如何利用云服务,解决海量用户的数据库使用问题. 杭州湖畔网络技术有限公司是一家专业提供SaaS化电商ERP服务的创业公司,主要用户群体为经营淘宝.天猫.京东等主流电商平台.自建商城.线下渠道的商家及中小企业.作为SaaS服务提供商,服务数万乃至数十万级用户是业务架构初期就必须考虑的问题.庞大的用户群以及海量的用户数据意味着基础设施的构

Android存储小结

转自:http://www.liaohuqiu.net/cn/posts/storage-in-android/ android系统自身自带有存储,另外也可以通过sd卡来扩充存储空间.前者好比pc中的硬盘,后者好移动硬盘. 前者空间较小,后者空间大,但后者不一定可用. 开发应用,处理本地数据存取时,可能会遇到这些问题: 需要判断sd卡是否可用: 占用过多机身内部存储,容易招致用户反感,优先将数据存放于sd卡; 应用数据存放路径,同其他应用应该保持一致,应用卸载时,清除数据: 标新立异在sd卡根目

数据库设计(1/9):数据元(Data Elements)

对于设计和创建数据库完全是个新手?没关系,Joe Celko,世界上读者数量最多的SQL作者之一,会告诉你这些基础.和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜.Joe是DMBS杂志是多年来最受读者喜爱的作者.他在美国.英国,北欧,南美及非洲传授SQL知识.他在ANSI / ISO SQL标准委员会工作了10年,为SQL-89和SQL-92标准做出了杰出贡献. 在你开始考虑你的数据库架构或表前,你需要细想下你的数据:数据是什么类型,你使用值的范围.它应该是唯一的,精确的且不含糊的.然

android 保存文件的各种目录列表

一般的,我们可以通过context和Environment来获取要保存文件的目录 ($rootDir) +- /data -> Environment.getDataDirectory() | | | | ($appDataDir) | +- data/com.srain.cube.sample | | | | ($filesDir) | +- files -> Context.getFilesDir() / Context.getFileStreamPath("") |

iOS 多线程 浅述

什么是进程? 进程是指在系统中正在运行的一个应用程序. 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内. 什么是线程? 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程). 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行. 小拓展: - 线程的串行(就像烤串一样) - 1个线程中任务的执行是串行的. - 如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务. - 在`同一时间内`,1个线程只能执行1个任务. 什么是多线程? 1个

CSDN博客排版技巧

CSDN的博客排版采用的编辑器是xhEditor,官方介绍是:能实现Word代码自动检测并清理,提供高效完美的Word代码过滤方案,生成代码最优化精简,不丢失任何细节效果.但是,实际使用中不丢失任何细节是不能的,word -> html 感觉样式或多或少都会有改变. 我对CSDN的在线编辑的使用感受: 使用默认的在线编辑,行间距略大,段间距略小,再加上无首行缩进,感觉排出来的段落层次不够清晰: 复制粘贴其他网页的内容和富文本格式的内容,会一并粘贴过来格式,嵌套在 <span style=&qu

数据库拆分案例

杭州湖畔网络技术有限公司是一家专业提供SaaS化电商ERP服务的创业公司,主要用户群体为经营淘宝.天猫.京东等主流电商平台.自建商城.线下渠道的商家及中小企业.作为SaaS服务提供商,服务数万乃至数十万级用户是业务架构初期就必须考虑的问题.庞大的用户群以及海量的用户数据意味着基础设施的构建必须兼顾高效与稳定,而按照通用的基础设施建设方案的话,需要面对成本过高.实现复杂.需要投入太多精力等问题,这对当时的湖畔网络这样的初创公司来说,完全不能承受.因此,更经济.更方便扩展的云服务平台成为首选.在对比

AAA游戏中雪的实现

现在越来越多的AAA游戏中都实现了逼真的雪的效果,比如战神4.地平线:黎明时分.荒野大镖客:救赎2.古墓丽影:崛起等都实现了不错的雪地效果.今天我们就来探究一下他们的实现方式.现在主流的实现方式都是通过硬件提供的细分功能来实现的. Batman: Arkham Origins 这个游戏里面没有地形,只有房顶和城市街道两种,所以它的做法比较取巧,局限性比较大. 动态生成置换高度图,主机使用视差映射,PC使用细分技术. 如何生成高度图? 把会影响雪地效果的物体(有一部分在雪的表面下)使用一个踝关节高