GCD

Grand Central Dispatch (GCD)  字面意思 宏大的中央调度器  反正就是很牛逼吧

在 gcd 中并不叫多线程开发,因为开发者并不涉及线程的开启和关闭以及调度. 只是操作任务在队列中, 所有关于线程的事都是有 GCD 帮我们去做的;

线程的开启线程的以及操作都是通过 GCD 完成的 所以开发者并不牵扯到线程的调度;只是调度的任务.具体开多少线程  什么时候开都有系统自己去操作

主队列 & 串行队列的区别?

 一个一个安排任务,队列特点:FIFO

  -并发队列:可以调度多个任务

    -串行队列:必须等待一个任务执行完成,再调度另外一个任务。最多只能开启一个线程。

  -主队列:以FIFO调度任务,如果主线程删共有任何任务在执行,主队列就不会调度任务,主要负责在主线程上执行任务!

全局队列

/*ios 7 DISPATCH_QUEUE_PRIORITY_HIGH 2  高优先级DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默认优先级DISPATCH_QUEUE_PRIORITY_LOW (-2) 低优先级DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN 非常低 基本忽略ios 8 用户体验度*  - QOS_CLASS_USER_INTERACTIVE 用户交互*  - QOS_CLASS_USER_INITIATED   用户使用*  - QOS_CLASS_DEFAULT          默认使用*  - QOS_CLASS_UTILITY          使用工具*  - QOS_CLASS_BACKGROUND       后台使用预留参数*/dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{NSLog(@"异步");});

并发异步

/**并发异步 开启异步线程 执行顺序 无序 第一个参数: 线程标识符 第二个参数:DISPATCH_QUEUE_CONCURRENT 并发队列
  */
dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_CONCURRENT);for (int i = 0; i < 100 ; i ++ ) {dispatch_async(q, ^{NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]);});}

并发同步

/**并发同步 不开启线程 按顺序执行1 线程标识符2 线程状态, DISPATCH_QUEUE_CONCURRENT 并发队列*/dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_CONCURRENT);for (int i = 0; i < 100 ; i ++ ) {dispatch_sync(q, ^{NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]);});}

串行同步

/**串行同步 不开启线程 按顺序执行*/dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_SERIAL);for (int i = 0; i < 100 ; i ++ ) {dispatch_sync(q, ^{NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]);});}

串行异步

/**串行异步 开启子线程线程 按顺序执行*/dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_SERIAL);for (int i = 0; i < 100 ; i ++ ) {dispatch_async(q, ^{NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]);});}

 线程组

    //创建线程dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_CONCURRENT);//创建线程组dispatch_group_t g = dispatch_group_create();dispatch_group_async(g, q, ^{});//添加任务到线程组dispatch_group_async(g, q, ^{});dispatch_group_async(g, q, ^{});dispatch_group_async(g, q, ^{});/**所有任务完成在 制定的线程通知任务完成*/dispatch_group_notify(g, dispatch_get_main_queue(), ^{});

单次执行

/*只执行一次*/static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{NSLog(@"只执行一次线程");});  //通常应用于创建单例 保证线程安全

转载于:https://www.cnblogs.com/azhen/p/7416677.html

ios GCD ---- (1)相关推荐

  1. iOS GCD(一)

    创建 //全局队列,一个并行的队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT ...

  2. iOS GCD中级篇 - dispatch_group的理解及使用

    上一篇GCD基础篇,以及同步.异步,并发.并行几个概率的理解 关于dispatch_group的概念以及几种场景下的使用 1.关于dispatch_group 把一组任务提交到队列中,这些队列可以不相 ...

  3. iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group

    同步,指代码在同一个线程运行 异步,代码在另一个线程运行 串行队列,提交到该队列的block会顺序执行 并行队列,提交到该队列的block会并发执行 如果想等某一队列中所有block都执行完了在执行一 ...

  4. ios. GCD 倒计时时间

    //倒计时时间 __block int timeout = 60; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_ ...

  5. GCD的其他(不常用)方法

    1. GCD的栅栏方法 dispatch_barrier_async 我们有时需要异步执行两组操作,而且第一组操作执行完之后,才能开始执行第二组操作.这样我们就需要一个相当于栅栏一样的一个方法将两组异 ...

  6. 2018 iOS 面试题大全(补充完整版)

    原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 整理的一些iOS面试相关问题,持续更新,敬请关注 2018 iOS面试题大全---全方面剖析面试 1.2018 ...

  7. iOS 知识点整理 (持续更新...)

    整理了些iOS相关的基础问题,每个问题可能会再写些扩展,需要具体了解可以看题目下方的链接 如有错漏,欢迎指出,谢谢 一.Swift 1.给一个数组,要求写一个函数,交换数组中的两个元素(swift可用 ...

  8. iOS知识点收藏梳理

    C 语言 iOS零碎知识--C语言内存分配函数区别 C语言的指针大归纳[三大关系(Five) C语言探索之旅 | 第一部分第五课:运算那点事 Swift 语言 Swift编程风格 Swift语法练习大 ...

  9. [iOS] 谈谈iOS多线程的锁

    五花八门的? 前言 iOS开发中由于各种第三方库的高度封装,对锁的使用很少,刚好之前面试中被问到的关于并发编程锁的问题,都是一知半解,于是决定整理一下关于iOS中锁的知识,为大家查缺补漏. 目录 第一 ...

  10. 聊一聊Flutter Engine线程管理与Dart Isolate机制

    阿里妹导读:Flutter是一款开源的移动跨平台UI开发套件,它不仅与现存的Native代码兼容,还能帮你用Dart语言快速开发高质量的跨平台App. 本文由闲鱼技术团队福居撰写,结合Flutter ...

最新文章

  1. html读取url中文件,HTML5基础知识 - JavaScript API - File - 读取文件为DataURL
  2. LMDB中的mmap、Copy On Write、MVCC深入理解——讲得非常好,常来看看!
  3. 磁盘与目录的容量(转)
  4. python beautiful soup 标签完全相同_Python爬取Python教程并制作成pdf
  5. 掌握基本的git命令,将本地文件上传到gitee
  6. 在html中定位属性怎么用,CSS元素定位的使用方法
  7. 剑指offer——面试题28:字符串的排列
  8. 分布式和微服务区别_分布式、集群、微服务到底有啥区别?
  9. python 累加_对Python实现累加函数的方法详解
  10. mem考试能用计算机吗,分享自己MEM考试经验
  11. 51单片机学习--数字时钟数字电压表
  12. imitate wechat - 1
  13. 3.27 期货每日早盘操作建议
  14. 英语一大作文模板如何自己制作?
  15. .NET Core、Xamarin、.NET Standard和.NET Framework四者之间的区别
  16. 基于用户的协同过滤推荐算法原理和实现
  17. 虚拟服务器的克隆,怎么克隆远程服务器上的虚拟机
  18. AMD GPU驱动,ROCM,Pytorch安装教程(A卡6700xt)
  19. 多线程抽取数据库数据,数据迁移
  20. Postgresql 的 pg_notify 方法介绍

热门文章

  1. C# winform中 窗体缩放自适应的方法(不同电脑/不同分辨率)
  2. 简单搭建es6编译环境
  3. 去掉iPhone、iPad的默认按钮样式
  4. linux脚本定义量,Linux上增加自定义脚本的展现量
  5. Java基础:常用的API
  6. Java:面向对象编程
  7. HTML:常用代码(自用)
  8. jq移除一条html语句,jquery html()删除脚本标签
  9. 微信公号“架构师之路”学习笔记(七)-互联网搜索架构设计
  10. 从零开始搭二维激光SLAM --- 总结