ios GCD ---- (1)
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)相关推荐
- iOS GCD(一)
创建 //全局队列,一个并行的队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT ...
- iOS GCD中级篇 - dispatch_group的理解及使用
上一篇GCD基础篇,以及同步.异步,并发.并行几个概率的理解 关于dispatch_group的概念以及几种场景下的使用 1.关于dispatch_group 把一组任务提交到队列中,这些队列可以不相 ...
- iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group
同步,指代码在同一个线程运行 异步,代码在另一个线程运行 串行队列,提交到该队列的block会顺序执行 并行队列,提交到该队列的block会并发执行 如果想等某一队列中所有block都执行完了在执行一 ...
- ios. GCD 倒计时时间
//倒计时时间 __block int timeout = 60; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_ ...
- GCD的其他(不常用)方法
1. GCD的栅栏方法 dispatch_barrier_async 我们有时需要异步执行两组操作,而且第一组操作执行完之后,才能开始执行第二组操作.这样我们就需要一个相当于栅栏一样的一个方法将两组异 ...
- 2018 iOS 面试题大全(补充完整版)
原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 整理的一些iOS面试相关问题,持续更新,敬请关注 2018 iOS面试题大全---全方面剖析面试 1.2018 ...
- iOS 知识点整理 (持续更新...)
整理了些iOS相关的基础问题,每个问题可能会再写些扩展,需要具体了解可以看题目下方的链接 如有错漏,欢迎指出,谢谢 一.Swift 1.给一个数组,要求写一个函数,交换数组中的两个元素(swift可用 ...
- iOS知识点收藏梳理
C 语言 iOS零碎知识--C语言内存分配函数区别 C语言的指针大归纳[三大关系(Five) C语言探索之旅 | 第一部分第五课:运算那点事 Swift 语言 Swift编程风格 Swift语法练习大 ...
- [iOS] 谈谈iOS多线程的锁
五花八门的? 前言 iOS开发中由于各种第三方库的高度封装,对锁的使用很少,刚好之前面试中被问到的关于并发编程锁的问题,都是一知半解,于是决定整理一下关于iOS中锁的知识,为大家查缺补漏. 目录 第一 ...
- 聊一聊Flutter Engine线程管理与Dart Isolate机制
阿里妹导读:Flutter是一款开源的移动跨平台UI开发套件,它不仅与现存的Native代码兼容,还能帮你用Dart语言快速开发高质量的跨平台App. 本文由闲鱼技术团队福居撰写,结合Flutter ...
最新文章
- html读取url中文件,HTML5基础知识 - JavaScript API - File - 读取文件为DataURL
- LMDB中的mmap、Copy On Write、MVCC深入理解——讲得非常好,常来看看!
- 磁盘与目录的容量(转)
- python beautiful soup 标签完全相同_Python爬取Python教程并制作成pdf
- 掌握基本的git命令,将本地文件上传到gitee
- 在html中定位属性怎么用,CSS元素定位的使用方法
- 剑指offer——面试题28:字符串的排列
- 分布式和微服务区别_分布式、集群、微服务到底有啥区别?
- python 累加_对Python实现累加函数的方法详解
- mem考试能用计算机吗,分享自己MEM考试经验
- 51单片机学习--数字时钟数字电压表
- imitate wechat - 1
- 3.27 期货每日早盘操作建议
- 英语一大作文模板如何自己制作?
- .NET Core、Xamarin、.NET Standard和.NET Framework四者之间的区别
- 基于用户的协同过滤推荐算法原理和实现
- 虚拟服务器的克隆,怎么克隆远程服务器上的虚拟机
- AMD GPU驱动,ROCM,Pytorch安装教程(A卡6700xt)
- 多线程抽取数据库数据,数据迁移
- Postgresql 的 pg_notify 方法介绍