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 ...
随机推荐
- 第 8 章 MySQL 数据库 Query 的优化
前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 Query 语句的优化进行相应的分析. ...
- javaWeb学习总结(10)- Filter(过滤器)常见应用(3)
一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html Form请求参数的中文问题 package me.gacl.web.filter; import java.io. ...
- 电商app开发新趋势!如何突显竞争力?
2017年是电商变化最大的一年,同时,也是最多机遇的一年,更是电商最好的时代,如最近所看到的亚马逊的市值已经超过了美国8大零售商的总和,带领美国率先走向了新零售时代;马云也在做改变,试图与线下的大卖场 ...
- C++ STL快速入门
在数月之前的机试中第一次体验到STL的威力,因为自己本来一直在用C语言做开发,很多数据结构都是自己造的,比如链表.队列等,第一次接触C++ STL后发现这些数据结构都已经给我提供好了,我直接拿去调用就 ...
- Adobe After Effects 2017-14.0安装教程
Adobe After Effects 2017-14.0安装教程 第一步:首先请将电脑的网络断开,很简单:禁用本地连接或者拔掉网线,这样就可以免除登录Creative Cloud帐号,安装更方便快捷 ...
- 低版本eclipse导入高版本eclipse创建项目报错问题
例如用高版本eclipse创建的项目,会默认使用的是jdk1.8版本, 低版本eclipse创建项目,会默认使用的是jdk1.7版本. 此时导入高版本eclipse项目时会报错(文件夹中会出现红色!) ...
- selinux导致docker启动失败
1. 问题描述:一向运行正常的一群容器,突然有一天挂掉了,再也起不来,报错如下 Error response from daemon: devmapper: Error mounting '/dev/ ...
- 写个百万级别full-stack小型协程库——原理介绍
其实说什么百万千万级别都是虚的,下面给出实现原理和测试结果,原理很简单,我就不上图了: 原理:为了简单明了,只支持单线程,每个协程共享一个4K的空间(你可以用堆,用匿名内存映射或者直接开个数组也都是可 ...
- git与github的使用
git和github是两个完全不同的概念,就好比如雷锋与雷峰塔的关系. git是一个版本管理工具,用来更好的管理你的程序,比如你原来提交过的内容,以后虽然修改了,但是通过git这个工具, 可以把你原来 ...
- python+selenium遇到鼠标悬停不成功可以使用js进行操作
问题:在定位这种悬停后出现下拉操作的时候,尝试了使用move_to_element的方法 # ele_logout = br.find_element_by_xpath('/html/body/div ...