从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队列优先级说明的更多相关文章

  1. iOS边练边学--GCD的基本使用、GCD各种队列、GCD线程间通信、GCD常用函数、GCD迭代以及GCD队列组

    一.GCD的基本使用 <1>GCD简介 什么是GCD 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数   GCD的优势 G ...

  2. 为GCD队列绑定NSObject类型上下文数据-利用__bridge_retained(transfer)转移内存管理权-备

    下面评论的好友“@Jim”给了种新的思路,就是在清除context的函数里面,用“_bridge_transfer”转换context,把context的内存管理权限重新交给ARC,这样,就不用显式调 ...

  3. java面向对象的栈 队列 优先级队列的比较

    栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一 ...

  4. rabbitmq设置消息优先级、队列优先级配置

    1.首先在consume之前声明队列的时候,要加上x-max-priority属性,一般为0-255,大于255出错  -----配置队列优先级 配置成功后rabbitmq显示: 2.在向exchan ...

  5. step 4 GCD 队列演练

    串行队列 特点 以先进先出的方式,顺序调度队列中的任务执行 无论队列中所指定的执行任务函数是同步还是异步,都会等待前一个任务执行完成后,再调度后面的任务 队列创建 dispatch_queue_t q ...

  6. NoHttp封装--06 NoHttp之队列、队列优先级

    public class Main { /** * 程序入口 */ public void start() { // 第一种,先进先出的队列 // YolandaLinkedQueue queue = ...

  7. Redis 实现队列优先级

    通常使用一个list来实现队列操作,这样有一个小限制,所以的任务统一都是先进先出,如果想优先处理某个任务就不太好处理了,这就需要让队列有优先级的概念,我们就可以优先处理高级别的任务. 实现方式: (1 ...

  8. 并发编程-concurrent指南-阻塞队列-优先级的阻塞队列PriorityBlockingQueue

    PriorityBlockingQueue是一个支持优先级的无界阻塞队列. 它使用了和类 java.util.PriorityQueue 一样的排序规则.你无法向这个队列中插入 null 值. 所有插 ...

  9. OC - GCD 队列组 - 下载图片画图

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self downloadIma ...

随机推荐

  1. 开涛spring3(1) - Spring概述

    1.1.1  Spring是什么 Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发.应用程序是由 ...

  2. 并串转换FPGA电路结构的探讨

    如题,并串转换时FPGA设计里,一个很常用的模块,这里有一个小的探讨. 一般情况下我们可以使用一个计数器与数据选择器进行并串转换,如下图的的结构.这个结构通过计数器不断的改变数据选择器的地址端,从而使 ...

  3. 搭建本地 Registry - 每天5分钟玩转 Docker 容器技术(20)

    Docker Hub 虽然非常方便,但还是有些限制,比如: 需要 internet 连接,而且下载和上传速度慢. 上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 reposito ...

  4. jQuery总结--版本二 事件处理函数

    一:事件处理函数 (1) one(事件名称, fn) 仅对指定事件监听一次,监听事件只会执行一次 <!DOCTYPE html> <html> <head lang=&q ...

  5. VR问题无关方向,VR全景为您领航,全景智慧城市已势不可当

    2016年,VR绝对是互联网科技圈的一个高频词. 在这一年里,Magic Leap获得阿里领投的近8亿美元的融资,VR公司的商业价值得到认可.Oculus Rift和HTC Vive的VR产品正式发货 ...

  6. AVL树(平衡二叉查找树)

    首先要说AVL树,我们就必须先说二叉查找树,先介绍二叉查找树的一些特性,然后我们再来说平衡树的一些特性,结合这些特性,然后来介绍AVL树. 一.二叉查找树 1.二叉树查找树的相关特征定义 二叉树查找树 ...

  7. 用Backtrack进行渗透测试评估

    Web应用程序的分析在渗透测试和漏洞评估中发挥了重要的作用.确定Web应用程序的正确信息(例如使用的插件,CMS类型等)都可以帮助测试者使用准确的漏洞来测试,能够降低整个渗透测试漏洞评估所花费的时间. ...

  8. 利用base64库暴力破解base加密

    做个base加密题python语法出了一堆错误..... 附上py中关于base加密/解码的知识:http://www.open-open.com/lib/view/open1433990719973 ...

  9. css让文字在一行内显示

    1.例如 p元素,里面的文字不换行显示,超出部分不隐藏 p{ width:100px; word-break:keep-all; white-space:nowrap; } 2.例如 p元素,里面的文 ...

  10. springmvc 之 深入核心研究

    一.前言:二.核心类与接口:三.核心流程图四.DispatcherServlet说明五.双亲上下文的说明六.springMVC-mvc.xml 配置文件片段讲解 七.如何访问到静态的文件,如jpg,j ...