zoukankan      html  css  js  c++  java
  • GCD基本使用

    GCD--Grand Central Dispatch

    纯C,提供非常多强大的函数

    GCD优势:
    1.是苹果公司为多核的并行运算提出的解决方案
    2.自动利用更多的CPU内核(如双核)
    3.自动管理线程的生命周期(创建、调度、销毁)
    4.只需告诉GCD需要执行的任务,不需编写线程管理代码


    任务和队列
    任务:
    执行什么操作
    队列:
    用来存放任务

    GCD使用步骤:
    1.定制任务
    2.将任务添加到队列
    GCD自动将队列中任务取出,放到对于线程中执行
    任务的取出遵循队列FIFO原则

    GCD有2个执行任务的函数
    1.同步方式:只在当前线程中执行任务,不具有开启新线程的能力
    dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);

    2.异步方式:在新线程中执行任务,具有开启新线程的能力
    dispatch_async(dispatch_queue_t queue,dispatch_block_t block);

    GCD队列2大类型
    1.并发队列(Concurrent Dispatch Queue)
    自动开启多个线程同时执行任务
    并发功能只在异步(dispatch_async)函数下有效

    2.串行队列(Serial Dispatch Queue)
    一个任务执行后再执行下一个任务

    GCD默认提供全局并发队列
    dispatch_get_global_queue
    // 获得全局的并发队列
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    // 将 任务 添加 全局队列 中去 异步 执行
    dispatch_async(queue, ^{
    NSLog(@"-----下载图片---%@", [NSThread currentThread]);
    });

  • 相关阅读:
    php基本语法与安装
    面向对象编程 es5和es6的构造函数
    利用正则搜索替换
    正则特殊符号
    正则边界符 限定符
    面试官给我挖坑:rm删除文件之后,空间就被释放了吗?
    为什么 IPv6 难以取代 IPv4
    Docker系列教程04-Docker构建镜像的三种方式
    Docker系列教程03-Docker私有仓库搭建(registry)
    Linux-I/O模型详解
  • 原文地址:https://www.cnblogs.com/fangchun/p/4685937.html
Copyright © 2011-2022 走看看