1.什么叫GCD?

简单来说就是:Grand Central Dispatch的简称,中文翻译就是:”牛逼的中枢调度器“

这是纯C语言,还提供了非常多强大的函数

2.GCD的相对优势:

(1)GCD是苹果公司为多核的并行运算提出的解决方案

(2)GCD会自动利用更多的cpu内核(比如:双核 等等)

(3)GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)

3.注意:

(1)GCD存在于libdispatch.dylib这个库中,这个调度库包含了GCD的所有的东西,但任何IOS程序,都默认加载在这个库中,在程序运行过程中会动态的加载,不需要我们手动导入。

(2)GCD是纯C语言的,因此我们在编写GCD相关代码的时候,面对的函数,而不是方法。

(3)GCD中的函数大多数以dispatch开头。

4.GCD的任务和队列

GCD中有两个核心概念:

(1)任务:执行什么操作

(2)队列:用来存放任务

GCD的使用有两个步骤:

(1)定制任务

(2)确定想做的事情

5.要执行的任务

(1)GCD中有两个用来执行任务的函数

注意:把右边的参数(任务)提交给左边的参数(队列)进行执行

<1>如果用同步的方式的话就用:dispatch_sync(dispatch_queue,dispatch_block_t block);

说明:queue:队列

block:任务

<2>如果用异步方法执行任务的话就用:dispatch_asynch_(dispatch_queue_tqueue,dispatch_block_t block);

重点:同步和异步的区别:

同步:在当前线程中执行

异步:在另一条线程中执行

6.队列

GCD队列分为两大类型:

(1)并发队列:可以让多个任务同时执行(自动开启多个线程同时执行任务)并发功能只有在异步的dispatch_async函数下才有效

(2)串行队列:让任务一个接一个这样执行(一个任务执行完毕后,在执行下一个任务)

7.并发队列:

GCD默认已经提供了全局的并发队列,供应使用,不需要手动创建。

使用dispatch_get_global_queue函数获得全局的并发队列;

示例:

dispatch_queue_t dispatch_get_global_queue(dispatch_queue_priority_t priority,unsigned long flags)这个参数留给以后用的所以我们传个0。

第一个参数为优先级,在这里是默认的。获取一个全局的默认优先级的并发队列。

dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAUI,0)这样就可以获取全局并发队列了

说明:全局并发队列的优先级

#define DISPATCH_QUEUE_PRIORITY_HIGH 2//高

#define DISPATCH_QUEUE_PRIORITY_DEFAULT//默认(中)

#define DISPATCH_QUEUE_PRIORITY_LOW//低

#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN//后天

8.串行队列

GCD串行有两种途径:

(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);

非ARC需要释放手动创建的队列:dispatch_release(queue);

(2)使用主队列(跟主线程有关系的队列)

主队列是GCD自带的一种特殊的串行队列,放在主队列中的任务,都会放到主线程中执行。

使用dispatch_get_main_queue()获得主队列

示例:

dispatch_queue_t queue = dispatch_get_main_queue();

9.说明:

同步、异步、并发、串行这四个术语是比较混淆的,所以好好注意哦!

同步和异步决定了是否开启多一条线程:

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

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

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

并发:多个任务执行同时进行

串行:一个执行完毕后再接着一个执行

提示:将任务添加到队列中,GCD会自动将队列中的任务取出来,放到对应的线程中并执行。当任务取出后遵循的队列FIFO原则:先进先出,后进后出。

无论什么队列和什么任务,线程的创建和回收不需要程序员参与,由队列来负责,程序员只需要面对队列和任务。

GCD在后端管理这一个线程池,GCD不仅决定着Block代码块将在哪个线程中被执行,

而且还可以根据可用的系统资源对这些线程进行管理,从而让开发者从线程管理的工作中解放出来,

通过GCD这种集中的管理线程,缓解了大量的线程被创建的问题。

10.一些队列的执行效果

第一篇:GCD多线程的概念的更多相关文章

  1. Flink入门-第一篇:Flink基础概念以及竞品对比

    Flink入门-第一篇:Flink基础概念以及竞品对比 Flink介绍 截止2021年10月Flink最新的稳定版本已经发展到1.14.0 Flink起源于一个名为Stratosphere的研究项目主 ...

  2. 第一篇:NSOperation的概念

    一.说明 NSOperation的作口:配合使用NSOperation和NSOperationQueue也能实现多线程 NSOperation和NSOperationQueue实现多线程的具体步骤: ...

  3. iOS开发多线程篇—GCD介绍

    iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...

  4. iOS开发多线程篇—GCD简介

    iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...

  5. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  6. iOS开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  7. 秒杀多线程第一篇 多线程笔试面试题汇总 ZZ 【多线程】

    http://blog.csdn.net/morewindows/article/details/7392749 系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些 ...

  8. iOS开发多线程篇—GCD的基本使用

    iOS开发多线程篇—GCD的基本使用 一.主队列介绍 主队列:是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队列中得任务,都会放到主线程中执行. 提示:如果把任务放到主队列中进 ...

  9. AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX

    AntDesign-React与VUE有点不一样,第一篇深入了解React的概念之一:JSX 一.什么是JSX 使用JSX声明一个变量(REACT当中的元素): const element =< ...

随机推荐

  1. poj 2584 T-Shirt Gumbo 网络流

    题目链接 有5种T-shirt, n个人, 每个人可以接受某些种T-shirt, 每种T-shirt的数量已知, 问每个人能否都穿上自己能接受的T-shirt. 源点向每种T-shirt连边, 权值为 ...

  2. MYSQL 退出的三个方式

    方式1: exit 方式2: quit 方式3: \q

  3. Bootstrap禁用响应式布局

    在Bootstrap中极其重要的一个技术内容便是响应式布局了,一次编码针对不同设备终端的强大能力使得响应式技术愈发流行. 不过正所谓"萝卜青菜各有所爱",如果你想要使用Bootst ...

  4. 宣布发布全新的 Windows Azure 缓存预览版

    全新 Windows Azure 缓存的预览版现已发布.此托管服务可以提供闪电般的数据访问速度,以帮助您构建更具可伸缩性.响应更快的应用程序. 详情如下: ·    托管式缓存:这一全新的托管服务为需 ...

  5. delphi调用外部程序打开文件

    delphi调用外部程序打开文件 ShellExecute的各种用法 一.利用系统默认的邮件收发器发送电子邮件 Uses ..., ShellAPI; Var lpHwnd: HWND; lpOper ...

  6. SQL基础查询实战

    总结: 一.单表查询的情况: 1.where.....group by .. Having count(..) 2.Group by haing min(..)条件and max(..)条件(查询最低 ...

  7. 第七届河南省赛G.Code the Tree(拓扑排序+模拟)

    G.Code the Tree Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 35  Solved: 18 [Submit][Status][Web ...

  8. Cocos2d-x:环境配置小节

    一.准备 须要下载下面内容. 1. vs2010 下载地址:http://download.microsoft.com/download/1/4/3/143B7583-6225-474F-88D5-5 ...

  9. Codeforce 424C Magic Formulas 找规律

    题目链接:http://codeforces.com/contest/424/problem/C 题意:求Q值 思路:找规律 显然能够得到一个矩阵 把这个矩阵画出来就能发现一个横向的规律和一个主对角线 ...

  10. c 统计字符串中字符出现的个数

    1.单纯用数组来解题 思路:从左往右循环,每次碰到一个字符就和左边的字符串比较,如果有相同的就右移,如果没有找到相同的就从这个位置向右统计个数并输出. #include<stdio.h> ...