Swift3 GCD队列优先级说明
从ios8开始,苹果引入了一个新的概念 QoS(quality of service),用于指定GCD队列的优先级。
swift3之前:只有4个优先级
high > default > low > background
swift3之后:调整为6个优先级
userInteractive > default > unspecified > userInitiated > utility > background
其中:userInteractive优先级最高,background最低
现有和之前的大概对应关系:
* DISPATCH_QUEUE_PRIORITY_HIGH: .userInteractive
* DISPATCH_QUEUE_PRIORITY_DEFAULT: .default
* DISPATCH_QUEUE_PRIORITY_LOW: .utility
* DISPATCH_QUEUE_PRIORITY_BACKGROUND: .background
我们使用时:
系统提供两个方法:

1、使用global(),系统会默认给予Default优先级
2、使用global(qos:xxx)自定义自己想要的优先级
测试代码:(摘自网络,侵权删)
1、我们对每个优先级进行打印:
for i in ... {
DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {
NSLog("DispatchQoS.QoSClass.default, %d", i)
}
DispatchQueue.global(qos: DispatchQoS.QoSClass.background).async {
NSLog("DispatchQoS.QoSClass.background, %d", i)
}
DispatchQueue.global(qos: DispatchQoS.QoSClass.unspecified).async {
NSLog("DispatchQoS.QoSClass.unspecified, %d", i)
}
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async {
NSLog("DispatchQoS.QoSClass.userInitiated, %d", i)
}
DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async {
NSLog("DispatchQoS.QoSClass.userInteractive, %d", i)
}
DispatchQueue.global(qos: DispatchQoS.QoSClass.utility).async {
NSLog("DispatchQoS.QoSClass.utility, %d", i)
}
}
打印结果:
-- ::12.927070 GraphicsContext[:] DispatchQoS.QoSClass.userInteractive,
-- ::12.927363 GraphicsContext[:] DispatchQoS.QoSClass.userInteractive,
-- ::12.927407 GraphicsContext[:] DispatchQoS.QoSClass.userInteractive,
-- ::12.927490 GraphicsContext[:] DispatchQoS.QoSClass.userInteractive,
-- ::12.927674 GraphicsContext[:] DispatchQoS.QoSClass.userInteractive,
-- ::12.927780 GraphicsContext[:] DispatchQoS.QoSClass.userInteractive,
-- ::12.927868 GraphicsContext[:] DispatchQoS.QoSClass.userInteractive,
-- ::12.927871 GraphicsContext[:] DispatchQoS.QoSClass.userInteractive,
-- ::12.928016 GraphicsContext[:] DispatchQoS.QoSClass.userInteractive,
-- ::12.928138 GraphicsContext[:] DispatchQoS.QoSClass.userInteractive,
-- ::12.928719 GraphicsContext[:] DispatchQoS.QoSClass.default,
-- ::12.928817 GraphicsContext[:] DispatchQoS.QoSClass.unspecified,
-- ::12.928924 GraphicsContext[:] DispatchQoS.QoSClass.userInitiated,
-- ::12.929190 GraphicsContext[:] DispatchQoS.QoSClass.default,
-- ::12.929225 GraphicsContext[:] DispatchQoS.QoSClass.utility,
-- ::12.929723 GraphicsContext[:] DispatchQoS.QoSClass.unspecified,
-- ::12.930104 GraphicsContext[:] DispatchQoS.QoSClass.userInitiated,
-- ::12.930131 GraphicsContext[:] DispatchQoS.QoSClass.utility,
-- ::12.930641 GraphicsContext[:] DispatchQoS.QoSClass.default,
-- ::12.931705 GraphicsContext[:] DispatchQoS.QoSClass.unspecified,
-- ::12.931857 GraphicsContext[:] DispatchQoS.QoSClass.userInitiated,
-- ::12.932196 GraphicsContext[:] DispatchQoS.QoSClass.default,
-- ::12.932277 GraphicsContext[:] DispatchQoS.QoSClass.utility,
-- ::12.932779 GraphicsContext[:] DispatchQoS.QoSClass.unspecified,
-- ::12.932889 GraphicsContext[:] DispatchQoS.QoSClass.userInitiated,
-- ::12.933215 GraphicsContext[:] DispatchQoS.QoSClass.default,
-- ::12.933027 GraphicsContext[:] DispatchQoS.QoSClass.utility,
-- ::12.933423 GraphicsContext[:] DispatchQoS.QoSClass.unspecified,
-- ::12.933586 GraphicsContext[:] DispatchQoS.QoSClass.userInitiated,
-- ::12.933709 GraphicsContext[:] DispatchQoS.QoSClass.default,
-- ::12.933831 GraphicsContext[:] DispatchQoS.QoSClass.unspecified,
-- ::12.933976 GraphicsContext[:] DispatchQoS.QoSClass.userInitiated,
-- ::12.934095 GraphicsContext[:] DispatchQoS.QoSClass.default,
-- ::12.934242 GraphicsContext[:] DispatchQoS.QoSClass.unspecified,
-- ::12.934356 GraphicsContext[:] DispatchQoS.QoSClass.userInitiated,
-- ::12.934503 GraphicsContext[:] DispatchQoS.QoSClass.default,
-- ::12.934611 GraphicsContext[:] DispatchQoS.QoSClass.utility,
-- ::12.934701 GraphicsContext[:] DispatchQoS.QoSClass.utility,
-- ::12.937166 GraphicsContext[:] DispatchQoS.QoSClass.unspecified,
-- ::12.937476 GraphicsContext[:] DispatchQoS.QoSClass.userInitiated,
-- ::12.937521 GraphicsContext[:] DispatchQoS.QoSClass.utility,
-- ::12.937682 GraphicsContext[:] DispatchQoS.QoSClass.default,
-- ::12.937868 GraphicsContext[:] DispatchQoS.QoSClass.unspecified,
-- ::12.937987 GraphicsContext[:] DispatchQoS.QoSClass.userInitiated,
-- ::12.938110 GraphicsContext[:] DispatchQoS.QoSClass.default,
-- ::12.938262 GraphicsContext[:] DispatchQoS.QoSClass.unspecified,
-- ::12.938381 GraphicsContext[:] DispatchQoS.QoSClass.userInitiated,
-- ::12.938692 GraphicsContext[:] DispatchQoS.QoSClass.utility,
-- ::12.938837 GraphicsContext[:] DispatchQoS.QoSClass.utility,
-- ::12.941483 GraphicsContext[:] DispatchQoS.QoSClass.utility,
-- ::12.949181 GraphicsContext[:] DispatchQoS.QoSClass.background,
-- ::12.949734 GraphicsContext[:] DispatchQoS.QoSClass.background,
-- ::12.950257 GraphicsContext[:] DispatchQoS.QoSClass.background,
-- ::12.950775 GraphicsContext[:] DispatchQoS.QoSClass.background,
-- ::12.951348 GraphicsContext[:] DispatchQoS.QoSClass.background,
-- ::12.952512 GraphicsContext[:] DispatchQoS.QoSClass.background,
-- ::12.953108 GraphicsContext[:] DispatchQoS.QoSClass.background,
-- ::12.953659 GraphicsContext[:] DispatchQoS.QoSClass.background,
-- ::12.954176 GraphicsContext[:] DispatchQoS.QoSClass.background,
-- ::12.954890 GraphicsContext[:] DispatchQoS.QoSClass.background,
结果分析:
其中:
1、userinteractive 10个全部第一轮就打印出来,优先级最高。
2、background 10个全部最后才打印出来,优先级最低。
3、中间几个大致为 default > unspecified > userInitiated > utility
~
Swift3 GCD队列优先级说明的更多相关文章
- iOS边练边学--GCD的基本使用、GCD各种队列、GCD线程间通信、GCD常用函数、GCD迭代以及GCD队列组
一.GCD的基本使用 <1>GCD简介 什么是GCD 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 GCD的优势 G ...
- 为GCD队列绑定NSObject类型上下文数据-利用__bridge_retained(transfer)转移内存管理权-备
下面评论的好友“@Jim”给了种新的思路,就是在清除context的函数里面,用“_bridge_transfer”转换context,把context的内存管理权限重新交给ARC,这样,就不用显式调 ...
- java面向对象的栈 队列 优先级队列的比较
栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一 ...
- rabbitmq设置消息优先级、队列优先级配置
1.首先在consume之前声明队列的时候,要加上x-max-priority属性,一般为0-255,大于255出错 -----配置队列优先级 配置成功后rabbitmq显示: 2.在向exchan ...
- step 4 GCD 队列演练
串行队列 特点 以先进先出的方式,顺序调度队列中的任务执行 无论队列中所指定的执行任务函数是同步还是异步,都会等待前一个任务执行完成后,再调度后面的任务 队列创建 dispatch_queue_t q ...
- NoHttp封装--06 NoHttp之队列、队列优先级
public class Main { /** * 程序入口 */ public void start() { // 第一种,先进先出的队列 // YolandaLinkedQueue queue = ...
- Redis 实现队列优先级
通常使用一个list来实现队列操作,这样有一个小限制,所以的任务统一都是先进先出,如果想优先处理某个任务就不太好处理了,这就需要让队列有优先级的概念,我们就可以优先处理高级别的任务. 实现方式: (1 ...
- 并发编程-concurrent指南-阻塞队列-优先级的阻塞队列PriorityBlockingQueue
PriorityBlockingQueue是一个支持优先级的无界阻塞队列. 它使用了和类 java.util.PriorityQueue 一样的排序规则.你无法向这个队列中插入 null 值. 所有插 ...
- OC - GCD 队列组 - 下载图片画图
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self downloadIma ...
随机推荐
- Kotlin入门第二课:集合操作
测试项目Github地址: KotlinForJava 前文传送: Kotlin入门第一课:从对比Java开始 初次尝试用Kotlin实现Android项目 1. 介绍 作为Kotlin入门的第二课, ...
- struts2.1.6教程六、使用标签
1.基础表单标签 准备工作:建立struts2tag项目,搭建好struts2的开发环境.在html我们常用的基础表单标签主要有文本域.密码域.提交.重置四种.它们在strust2中可以通过标签来生成 ...
- awk之随机函数rand()和srand() (转)
转自:http://blog.chinaunix.net/uid-10540984-id-2942041.html 文件: 1234567 abcdefg ...... 现在想要随机抽取5列组成下 ...
- 修改es最大返回结果数
curl -XPUT http://114.215.171.188:9200/logstash-serverlog/_settings -d '{"index":{"ma ...
- firstChild,lastChild,nextSibling,previousSibling & 兼容性写法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JDBC连接数据库程序
废话少说,看了尚学堂的视频以及某大神的博客,总结出以下.(本文以oracle数据库为例) 创建一个JDBC连接数据库的程序,需要着手做以下几件事情: 注意,这里边使用了java.sql.Stateme ...
- Coursera 机器学习笔记(八)
主要为第十周内容:大规模机器学习.案例.总结 (一)随机梯度下降法 如果有一个大规模的训练集,普通的批量梯度下降法需要计算整个训练集的误差的平方和,如果学习方法需要迭代20次,这已经是非常大的计算代价 ...
- openvpn实现内网 映射到 外网
openvpn实现内网 映射到 外网 场景介绍: 机器介绍 本地一台Ubuntu服务器A , 处于内网中 , 无外网IP 外网一台Ubuntu服务器B , 外网地址139.199.4.205 目标 : ...
- 利用arpspoof和urlsnarf 进行ARP嗅探
地址解析协议 (ARP, Address Resolution Protocol) 是如何将网络设备的MAC地址和其IP地址关联起来的,这样在同一个局域网内的设备就能相互知道彼此的存在.ARP基本上就 ...
- ionic3 环境配置 + 運行第一個項目
1.首先我們先下載個 nodejs安裝包 地址:https://nodejs.org/en/ 安裝 檢查是否安裝成功,打開命令提示符 輸入 node -v 回車 查看版本 結果: 2.安裝ionic ...