美文网首页程序员
IOSGCD简单使用

IOSGCD简单使用

作者: _CLAY_ | 来源:发表于2017-11-02 14:00 被阅读36次

GCD并不是多线程技术 而是并发解决技术

简介:
什么是GCD?--全称是 Grand Central Dispatch ,可译为“牛逼的中枢调度器”
纯C语言,提供了非常强大的函数


GCD的优势
1. GCD是苹果公司为多核的并行运算提出的解决方案
2. GCD会自动利用更多的CPU内核(比如双核、四核)
3. GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
4. 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码
GCD中有2个核心概念
1. 任务:执行什么操作
2. 队列:用来存放任务
GCD的使用就2个步骤
1. 定制任务 -- (确定想做的事情)
2. 将任务添加到队列中
* GCD会自动将队列中的任务取出,放到对应的线程中执行
* 任务的取出遵循队列的FIFO原则:先进先出,后进后出

GCD 常见代码

同步执行方法,这句话不执行完,就不会执行下一任务,同步执行不会开启线程

//1.创建队列
dispatch_queue_t q = dispatch_get_global_queue(0, 0);
//2.任务添加到队列中
//2.1 定义任务 -- block
    void(^task)() = ^() {
        NSLog(@"%@",[NSThread currentThread]);
    };
//2.2 添加任务到队列,并且会执行
dispatch_sync(q, task);

异步执行任务 如果任务没有执行完毕,可以不用等待,异步执行下一个任务
具备开启线程的能力! 异步通常又是多线程的代名词

    //1.创建队列
    dispatch_queue_t q = dispatch_get_global_queue(0, 0);
    //2.定义任务 block
    void(^task)() = ^() {
        NSLog(@"%@",[NSThread currentThread]);
    };
    //3.添加任务到队列
    dispatch_async(q, task);

GCD的方法

    // 指定任务执行方法 -- 异步
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
    //耗时操作
        NSLog(@"%@",[NSThread currentThread]);
    //主队列 就是专门负责在主线程上调度任务的队列
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"更新UI %@",[NSThread currentThread]);
        });
    });

GCD 核心概念:将任务添加到队列,指定任务执行的方法

  • 任务
    • 使用block 封装
    • block 就是一个提前准备好的代码块,在需要的时候执行
  • 队列
    • 串行队列:一个接一个的调度任务
    • 并发队列:可以同时调度多个任务
  • 任务执行函数(任务都需要在线程中执行!!!)
    • 同步执行:当前指令不完成,不会执行下个任务
    • 异步执行:当前指令不完成,可移执行下一条指令
//MARK:串行队列,同步任务
//    1.队列 - 串行
    /**
     1. 队列的名称:
     2. 队列的属性:NULL / DISPATCH_QUEUE_SERIAL 串行队列
     */
    dispatch_queue_t q = dispatch_queue_create("WBC", NULL);
//    2.同步执行任务
    dispatch_sync(q, ^{
        NSLog(@"%@",[NSThread currentThread]);
    });
//MARK:串行队列,异步任务
//    1.队列 - 串行
    dispatch_queue_t q = dispatch_queue_create("WBC", NULL);
    dispatch_async(q, ^{
        NSLog(@"%@",[NSThread currentThread]);
    });
//MARK:并发队列,同步执行
/**
     1. 队列的名称:
     2. 队列的属性:DISPATCH_QUEUE_CONCURRENT 并发队列
     */
dispatch_queue_t q = dispatch_queue_create("WBC", DISPATCH_QUEUE_CONCURRENT);
    dispatch_sync(q, ^{
        NSLog(@"%@",[NSThread currentThread]);
    });
//MARK:并发队列,异步执行
dispatch_queue_t q = dispatch_queue_create("WBC", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(q, ^{
        NSLog(@"%@",[NSThread currentThread]);
    });

小结:

- 开不开线程,取决于执行任务的函数,同步不开,异步才可能开
- 开几条线程,取决于队列,串行开一条,并发可以开多条(异步)

相关文章

  • IOSGCD简单使用

    GCD并不是多线程技术 而是并发解决技术 简介:什么是GCD?--全称是 Grand Central Dispat...

  • IOSGCD概念及使用

    一、GCD的概念:GCD(Grand Central Dispatch),是有Apple公司开发的一个多核编程的解...

  • iOSgcd队列

    ios的gcd dispatch_queue可以理解为是一种线程池化技术的实现。 1,全局一共几个池?除了主线程所...

  • 2018-02-26

    iOSGCD同步异步、并发串行栅栏信号量group锁RunLoopAFN 包活定时器Runtimeisaswizz...

  • IOSGCD定时器

    GCD的定时器

  • 简单使用

    创建模型 过滤器 我们有一些字段和我们想让用户筛选的基础上 名称、价格或release_date。 我们创建一个 ...

  • gorange

    数组中简单使用 map中简单使用

  • 简单使用使用kaggle

    向我这样的条件不好的可以考虑借助云gpu来加速训练,借助kaggle可以在kaggle服务器上训练数据,kaggl...

  • 零碎的小程序笔记

    目录 template的简单使用WXS的简单使用npm的简单使用倒计时js的实现wx:for的使用一些js方法记录...

  • 命令行的简单使用

    Git命令行的简单使用,仅供自己使用 pod命令行的简单使用

网友评论

    本文标题:IOSGCD简单使用

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