从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. BZOJ1086 [SCOI2005]王室联邦

    Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成 员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个 ...

  2. Java 8怎么了:局部套用vs闭包

    [编者按]本文作者为专注于自然语言处理多年的 Pierre-Yves Saumont,Pierre-Yves 著有30多本主讲 Java 软件开发的书籍,自2008开始供职于 Alcatel-Luce ...

  3. [MySQL复制异常]&#39;Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT.&#39;

    MySQL复制错误]Last_Errno: 1666 Last_Error: Error executing row event: 'Cannot execute statement: imposs ...

  4. ecshop调用文章显示上一篇下一篇

    首先调用文章中的上一篇和下一篇语法为:  代码如下 复制代码 上一篇:<a href="{$next_article.url}">{$next_article.titl ...

  5. AndroidStudio旧模板使用方法

    ***AndroidStudio旧模板使用方法*** 解压后用BlankActivity文件夹替换AndroidStudio安装目录下plugins\android\lib\templates\act ...

  6. Material风格的Quick组件,妈妈再也不用担心我的界面不好看了

    https://github.com/papyros/qml-material http://www.zhihu.com/question/38523930

  7. 【百度地图API】多家地图API文件大小对比

    原文:[百度地图API]多家地图API文件大小对比 于2011.6.9日更新百度地图API文件大小.同时更新图片. 任务描述: 明天就是元宵佳节啦~这是一个团团圆圆的节日,于是,再次想把各家API聚在 ...

  8. KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架之koahub-body-res

    koahub body res Format koa's respond json. Installation $ npm install koahub-body-res Use with koa v ...

  9. Zabbix如何设置脚本告警

    设置告警脚本的路径 # vim /etc/zabbix/zabbix_server.confAlertScriptsPath=/usr/lib/zabbix/alertscripts 创建脚本 在这里 ...

  10. Oracle 批量修改字段长度

    Oracle 批量修改字段长度 SELECT  'alter table '||a.table_name||' MODIFY  '||A.COLUMN_NAME||' VARCHAR2(100);' ...