GCD

作者: 弹一首键盘协奏曲 | 来源:发表于2016-06-29 21:55 被阅读215次

      在iOS所有实现多线程的方案中,GCD应该是最有魅力的,因为GCD本身是苹果公司为多核的并行运算提出的解决方案。GCD在工作时会自动利用更多的处理器核心,以充分利用更强大的机器。GCD是Grand Central Dispatch的简称,它是基于C语言的。如果使用GCD,完全由系统管理线程,我们不需要编写线程代码。只需定义想要执行的任务,然后添加到适当的调度队列(dispatch queue)。GCD会负责创建线程和调度你的任务,系统直接提供线程管理

    使用GCD的时候有以下几个步骤:

    一、创建任务:确定要执行什么操作

    二、创建队列:将任务添加到队列中  GCD会将队列里的任务取出,放到对应的线程中去执行

    三、选择任务的执行函数:

1.同步的方式执行函数

dispatch_sync(dispatch_queue_t queue, ^(void)block);

参数1:queue是对应的队列

参数2:block是对应的执行任务

2.异步的方式执行函数

dispatch_async(dispatch_queue_t queue, ^(void)block);

参数1:队列

参数2:对应的任务

队列有下面四种

*需要注意的是:主队列中严禁提交同步任务  会导致线程卡死  导致界面假死

主队列   不允许在主线程中提交同步任务,否则会死循环   刷新UI的操作放到主队列中执行

dispatch_queue_t mainQueue = dispatch_get_main_queue();

同步状态:会卡死

异步状态:不会开线程(会在线程闲下来的时候执行提交的任务)

//全局并发队列

dispatch_queue_t globalQueue

=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

同步�状态:不会开线程,顺序执行

异步状态:会开线程,并且乱序执行

//自定义串行

dispatch_queue_t serialQueue=dispatch_queue_create("abc", NULL);

同步状态:不开线程,并且顺序执行

异步状态:开一条线程,顺序执行

//自定义的并行队列

dispatch_queue_t ConcurrentQueue=dispatch_queue_create("abc", DISPATCH_QUEUE_CONCURRENT);

同步状态:不开线程,顺序执行

异步状态:开线程,乱序执行(会开多条线程)

如下方法   来做示例

-(void)threadCommunication{

//创建主队列

dispatch_queue_t  mainQueue = dispatch_get_main_queue();

//创建全局并发队列

dispatch_queue_t  globalQueue

=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//开启异步任务

dispatch_async(globalQueue, ^{

NSURL *url = [NSURL URLWithString:@"http://v1.qzone.cc/pic/201408/29/17/03/540041ff31605450.jpeg%21600x600.jpg"];

NSData *data= [NSData dataWithContentsOfURL:url];

NSLog(@"全局并发队列=%@",[NSThread currentThread]);

        //开启第二个异步任务

         dispatch_async(mainQueue, ^{

          //这里刷UI《有好东西哦。你懂的》

          self.MyImageView.image=[UIImage imageWithData:data];

          NSLog(@"主队列=%@",[NSThread currentThread]);

            });

     });

}

相关文章

  • 多线程之GCD

    GCD介绍 1、GCD简介 2、GCD任务和队列 3、GCD 的基本使用 4、GCD 线程间的通信 5、GCD 的...

  • 扩展GCD(求逆元,解同余方程等等)

    首先要知道gcd函数的基本性质:gcd(a,b)=gcd(b,a)=gcd(|a|,|b|)=gcd(b,a%b)...

  • iOS - GCD

    目录 GCD简介 GCD核心概念 GCD队列的使用 GCD的常见面试题 GCD简介 Grand Central D...

  • iOS-多线程:GCD

    GCD 简介 GCD 任务和队列 GCD 的使用步骤 GCD 的基本使用(6种不同组合区别) GCD 线程间的通信...

  • 浅析GCD

    GCD目录: 1. GCD简介 为什么要用GCD呢? GCD可用于多核的并行运算GCD会自动利用更多的CPU内核(...

  • 7.3 多线程-GCD

    多线程-GCD 多线程-GCD-串行并行 多线程-GCD.png GCD-线程的通讯、延时操作、定时器 GCD-线...

  • iOS 多线程--GCD

    一、GCD基本介绍 1.GCD简介 GCD是Grand Central Dispatch的缩写,GCD是苹果推出的...

  • 自用算法模板(JAVA版)

    一、数论 1)GCD GCD(求最大公约数) QGCD(快速GCD) extGCD(拓展GCD,解决ax + by...

  • GCD介绍

    一、GCD简单介绍 什么是GCD GCD优势 任务和队列 GCD有2个核心概念 GCD的使用就2个步骤 将任务添加...

  • 7.多线程基础(七)GCD加强

    1.GCD串行队列和并发队列 2.GCD延时执行 3.GCD线程组:(的作用) 4.GCD定时器: GCD的实现 ...

网友评论

      本文标题:GCD

      本文链接:https://www.haomeiwen.com/subject/tpyxjttx.html