美文网首页
GCD基本原理

GCD基本原理

作者: 胡智钦 | 来源:发表于2022-04-13 17:50 被阅读0次
GCD(Grand Central Dispatch)简介
  1. 纯C语言,函数(异步dispatch_async同步dispatch_sync
  2. 优势:(CPU)多核并行运算,自动创建、调度、销毁
GCD 函数

异步dispatch_async

  • 不用等待当前语句执行完毕
  • 会开启线程执行block的任务
  • 异步是多线程的代名词

同步dispatch_sync

  • 必须等待当前语句执行完毕
  • 不会开启线程
  • 在当前线程执行block任务
队列(FIFO)

串行队列

  • DQF_WIDTH = 1

同步串行
1. 不会开启线程,在当前线程执行任务
2. 任务串行执行,任务一个接着一个
3. 会产生堵塞

异步串行
1. 开启一条新线程
2. 任务一个接着一个

并发队列

  • DQF_WIDTH = MAX

同步并发
1. 不会开启线程,在当前线程执行任务
2. 任务一个接着一个

异步并发
1. 可能会开启新线程或用已存在的线程,在当前线程执行任务
2. 任务异步执行,没有顺序,CPU调度有关

队列的几种类型

串行(DISPATCH_QUEUE_SERIAL)
并发(DISPATCH_QUEUE_CONCURRENT)
主队列(dispatch_get_main_queue 串行队列)
全局队列(dispatch_get_global_queue 并发队列)

函数说明:
dispatch_sync // 同步
dispatch_async // 异步
dispatch_queue_t // 主要分为两种,串行、并行
dispatch_queue_create("concurrent_queue",DISPATCH_QUEUE_CONCURRENT); // 并发
dispatch_queue_create("serial_queue", DISPATCH_QUEUE_SERIAL) // 串行
dispatch_once_t // 代码只会执行一次,用于单例
dispatch_after; // 延迟操作
dispatch_get_main_queue(); // 回到主队列线程操作
dispatch_get_global_queue(0, 0); // 全局队列
dispatch_semaphore_create(2); // 创建2条信号量
死锁
死锁情况① :异步串行 中的进行同步block任务会死锁
dispatch_queue_t queue = dispatch_queue_create("xx", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{ 
  NSLog(@"1");
  dispatch_sync(queue, ^{
      NSLog(@"2");
  });
  NSLog(@"3");
});

死锁情况②:主队列同步block任务 会死锁
dispatch_sync(dispatch_get_main_queue(), ^{});

相关文章

  • GCD基本原理

    GCD(Grand Central Dispatch)简介 纯C语言,函数(异步dispatch_async、同步...

  • GCD讲解与异步下载图片例子

    GCD是什么 CGD就是线程管理,通过dispatch(派发)功能进行操作,大部分函数都是C 异步的基本原理 获取...

  • 多线程之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基本原理

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