GCD初识

作者: Mr丶炎 | 来源:发表于2016-07-22 20:04 被阅读10次
  • 什么是GCD
    GCD是牛逼的中枢调度器。它是纯C语言,提供了很多非常强大的函数

  • GCD的优势
    它是苹果公司为多核的并行运算提供的解决方案
    GCD会自动利用CPU的内核
    GCD会自动管理线程的生命周期(创建线程,调度线程,线程销毁)

任务和队列

GCD中的两个核心概念

  • 任务:执行什么操作
  • 队列:用于存放任务

GCD使用的两个步骤

  1. 定制任务
    确定想做的事情
  2. 将任务添加到队列中
    GCD会自动将队列中的任务取出,放到对应的线程中
    任务的取出遵循队列FIFO原则:先进先出,后进后出
执行任务
Snip20160722_4.png

同步和异步的区别:
同步:只能在当前线程中执行任务,不具备开启新线程的能力
异步:可以在新的线程中执行任务,具备开启新线程的能力

队列的两大类型
Snip20160722_5.png

代码演示

/**
 * 异步函数 + 串行队列 :会开启新的线程,但是线程是串行的,一个执行完执行下一个
 */
- (void)asyncSerial {
    
    
    // 创建串行队列
    dispatch_queue_t queue = dispatch_queue_create("com.pc.queue", DISPATCH_QUEUE_SERIAL);
    
    // 或者写NULL, NULL就是串行队列
//    dispatch_queue_t queue = dispatch_queue_create("com.pc.queue", NULL);
    
    // 2.将任务加入队列(async 异步)
    dispatch_async(queue, ^{
        
        NSLog(@"1----%@", [NSThread currentThread]);
        
    });
    
    dispatch_async(queue, ^{
        
        NSLog(@"2----%@", [NSThread currentThread]);
        
    });
    
    dispatch_async(queue, ^{
        
        NSLog(@"3----%@", [NSThread currentThread]);
        
    });

}


/**
 * 同步函数 + 并发队列 :不能开启新的线程,肯定没有并发能力
 */
- (void)syncConcurrent {
    // 获得全局的并发队列
    // 第一个参数是优先级,第二个先传0就行
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    // 2.将任务加入队列(async 异步)
    dispatch_sync(queue, ^{
       
            NSLog(@"1----%@", [NSThread currentThread]);
       
    });
    
    dispatch_sync(queue, ^{
      
            NSLog(@"2----%@", [NSThread currentThread]);
       
    });
    
    dispatch_sync(queue, ^{
      
            NSLog(@"3----%@", [NSThread currentThread]);
       
    });

}

/**
 * 异步函数 + 并发队列 :可以同时开启多条线程
 */
- (void)asyncConcurrent {
    // 1.创建并发队列, 也可以不用创建
    // label 相当于队的名字  DISPATCH_QUEUE_CONCURRENT 并发
//    dispatch_queue_t queue = dispatch_queue_create("test.queue", DISPATCH_QUEUE_CONCURRENT);
    
    // 获得全局的并发队列
    // 第一个参数是优先级,第二个先传0就行
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    // 2.将任务加入队列(async 异步)
    dispatch_async(queue, ^{
        for (NSInteger i = 0; i < 10; i++) {
            NSLog(@"1----%@", [NSThread currentThread]);
        }
    });
    
    dispatch_async(queue, ^{
        for (NSInteger i = 0; i < 10; i++) {
            NSLog(@"2----%@", [NSThread currentThread]);
        }
    });
    
    dispatch_async(queue, ^{
        for (NSInteger i = 0; i < 10; i++) {
            NSLog(@"3----%@", [NSThread currentThread]);
        }
    });
}


Snip20160723_1.png

相关文章

  • GCD初识

    什么是GCDGCD是牛逼的中枢调度器。它是纯C语言,提供了很多非常强大的函数 GCD的优势它是苹果公司为多核的并行...

  • GCD初相识

    GCD初识一 谈到iOS多线程,一般都会谈到四种方式:pthread、NSThread、GCD和NSOperati...

  • 一 GCD初识

    1.GCD基础概念(此笔记为学习Objective-C高级编程书中第三章所记录的相关知识点) gcd为异步执行任务...

  • iOS GCD初识.md

    串行队列 串行队列:操作是按顺序执行的,并且都在同一个线程上输出 一个串行队列对应只有一个线程,因此同时只能执行一...

  • GCD技术

    初识GCD 在我们平时的OC开发中经常需要用到多线程编程,而GCD这项技术是最受开发者喜爱的多线程技术,我们今天就...

  • 技术贴:2.初识GCD

    GCD全程Grand Central Dispatch 摒弃掉了线程中复杂的创建线程和开启线程的繁琐。只需要关注最...

  • 多线程之GCD

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

  • GCD 中的同步、异步、串行、并行还傻傻分不清楚?

    刚接触 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...

网友评论

      本文标题:GCD初识

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