• 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 1...10 {
           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)
           }
    }

    打印结果:

    2016-11-15 11:46:12.927070 GraphicsContext[2099:635166] DispatchQoS.QoSClass.userInteractive, 1
    2016-11-15 11:46:12.927363 GraphicsContext[2099:635166] DispatchQoS.QoSClass.userInteractive, 2
    2016-11-15 11:46:12.927407 GraphicsContext[2099:635171] DispatchQoS.QoSClass.userInteractive, 3
    2016-11-15 11:46:12.927490 GraphicsContext[2099:635166] DispatchQoS.QoSClass.userInteractive, 4
    2016-11-15 11:46:12.927674 GraphicsContext[2099:635166] DispatchQoS.QoSClass.userInteractive, 5
    2016-11-15 11:46:12.927780 GraphicsContext[2099:635166] DispatchQoS.QoSClass.userInteractive, 6
    2016-11-15 11:46:12.927868 GraphicsContext[2099:635172] DispatchQoS.QoSClass.userInteractive, 7
    2016-11-15 11:46:12.927871 GraphicsContext[2099:635166] DispatchQoS.QoSClass.userInteractive, 8
    2016-11-15 11:46:12.928016 GraphicsContext[2099:635172] DispatchQoS.QoSClass.userInteractive, 9
    2016-11-15 11:46:12.928138 GraphicsContext[2099:635166] DispatchQoS.QoSClass.userInteractive, 10
    2016-11-15 11:46:12.928719 GraphicsContext[2099:635113] DispatchQoS.QoSClass.default, 1
    2016-11-15 11:46:12.928817 GraphicsContext[2099:635166] DispatchQoS.QoSClass.unspecified, 1
    2016-11-15 11:46:12.928924 GraphicsContext[2099:635172] DispatchQoS.QoSClass.userInitiated, 1
    2016-11-15 11:46:12.929190 GraphicsContext[2099:635173] DispatchQoS.QoSClass.default, 2
    2016-11-15 11:46:12.929225 GraphicsContext[2099:635171] DispatchQoS.QoSClass.utility, 1
    2016-11-15 11:46:12.929723 GraphicsContext[2099:635174] DispatchQoS.QoSClass.unspecified, 2
    2016-11-15 11:46:12.930104 GraphicsContext[2099:635176] DispatchQoS.QoSClass.userInitiated, 2
    2016-11-15 11:46:12.930131 GraphicsContext[2099:635175] DispatchQoS.QoSClass.utility, 2
    2016-11-15 11:46:12.930641 GraphicsContext[2099:635177] DispatchQoS.QoSClass.default, 3
    2016-11-15 11:46:12.931705 GraphicsContext[2099:635179] DispatchQoS.QoSClass.unspecified, 3
    2016-11-15 11:46:12.931857 GraphicsContext[2099:635180] DispatchQoS.QoSClass.userInitiated, 3
    2016-11-15 11:46:12.932196 GraphicsContext[2099:635181] DispatchQoS.QoSClass.default, 4
    2016-11-15 11:46:12.932277 GraphicsContext[2099:635178] DispatchQoS.QoSClass.utility, 3
    2016-11-15 11:46:12.932779 GraphicsContext[2099:635183] DispatchQoS.QoSClass.unspecified, 4
    2016-11-15 11:46:12.932889 GraphicsContext[2099:635182] DispatchQoS.QoSClass.userInitiated, 4
    2016-11-15 11:46:12.933215 GraphicsContext[2099:635185] DispatchQoS.QoSClass.default, 5
    2016-11-15 11:46:12.933027 GraphicsContext[2099:635184] DispatchQoS.QoSClass.utility, 4
    2016-11-15 11:46:12.933423 GraphicsContext[2099:635113] DispatchQoS.QoSClass.unspecified, 5
    2016-11-15 11:46:12.933586 GraphicsContext[2099:635166] DispatchQoS.QoSClass.userInitiated, 5
    2016-11-15 11:46:12.933709 GraphicsContext[2099:635172] DispatchQoS.QoSClass.default, 6
    2016-11-15 11:46:12.933831 GraphicsContext[2099:635173] DispatchQoS.QoSClass.unspecified, 6
    2016-11-15 11:46:12.933976 GraphicsContext[2099:635174] DispatchQoS.QoSClass.userInitiated, 6
    2016-11-15 11:46:12.934095 GraphicsContext[2099:635176] DispatchQoS.QoSClass.default, 7
    2016-11-15 11:46:12.934242 GraphicsContext[2099:635177] DispatchQoS.QoSClass.unspecified, 7
    2016-11-15 11:46:12.934356 GraphicsContext[2099:635179] DispatchQoS.QoSClass.userInitiated, 7
    2016-11-15 11:46:12.934503 GraphicsContext[2099:635180] DispatchQoS.QoSClass.default, 8
    2016-11-15 11:46:12.934611 GraphicsContext[2099:635171] DispatchQoS.QoSClass.utility, 5
    2016-11-15 11:46:12.934701 GraphicsContext[2099:635175] DispatchQoS.QoSClass.utility, 6
    2016-11-15 11:46:12.937166 GraphicsContext[2099:635186] DispatchQoS.QoSClass.unspecified, 8
    2016-11-15 11:46:12.937476 GraphicsContext[2099:635188] DispatchQoS.QoSClass.userInitiated, 8
    2016-11-15 11:46:12.937521 GraphicsContext[2099:635187] DispatchQoS.QoSClass.utility, 7
    2016-11-15 11:46:12.937682 GraphicsContext[2099:635181] DispatchQoS.QoSClass.default, 9
    2016-11-15 11:46:12.937868 GraphicsContext[2099:635183] DispatchQoS.QoSClass.unspecified, 9
    2016-11-15 11:46:12.937987 GraphicsContext[2099:635182] DispatchQoS.QoSClass.userInitiated, 9
    2016-11-15 11:46:12.938110 GraphicsContext[2099:635185] DispatchQoS.QoSClass.default, 10
    2016-11-15 11:46:12.938262 GraphicsContext[2099:635113] DispatchQoS.QoSClass.unspecified, 10
    2016-11-15 11:46:12.938381 GraphicsContext[2099:635166] DispatchQoS.QoSClass.userInitiated, 10
    2016-11-15 11:46:12.938692 GraphicsContext[2099:635178] DispatchQoS.QoSClass.utility, 8
    2016-11-15 11:46:12.938837 GraphicsContext[2099:635184] DispatchQoS.QoSClass.utility, 9
    2016-11-15 11:46:12.941483 GraphicsContext[2099:635174] DispatchQoS.QoSClass.utility, 10
    2016-11-15 11:46:12.949181 GraphicsContext[2099:635115] DispatchQoS.QoSClass.background, 1
    2016-11-15 11:46:12.949734 GraphicsContext[2099:635115] DispatchQoS.QoSClass.background, 2
    2016-11-15 11:46:12.950257 GraphicsContext[2099:635115] DispatchQoS.QoSClass.background, 3
    2016-11-15 11:46:12.950775 GraphicsContext[2099:635115] DispatchQoS.QoSClass.background, 4
    2016-11-15 11:46:12.951348 GraphicsContext[2099:635115] DispatchQoS.QoSClass.background, 5
    2016-11-15 11:46:12.952512 GraphicsContext[2099:635115] DispatchQoS.QoSClass.background, 6
    2016-11-15 11:46:12.953108 GraphicsContext[2099:635115] DispatchQoS.QoSClass.background, 7
    2016-11-15 11:46:12.953659 GraphicsContext[2099:635115] DispatchQoS.QoSClass.background, 8
    2016-11-15 11:46:12.954176 GraphicsContext[2099:635115] DispatchQoS.QoSClass.background, 9
    2016-11-15 11:46:12.954890 GraphicsContext[2099:635115] DispatchQoS.QoSClass.background, 10

    结果分析:

    其中:

    1、userinteractive 10个全部第一轮就打印出来,优先级最高。

    2、background 10个全部最后才打印出来,优先级最低。

    3、中间几个大致为 default > unspecified > userInitiated > utility

  • 相关阅读:
    Qt学习之系列[9] – QCoreApplication:processEvents()可能会引起递归,导致栈溢出崩溃
    Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法:
    获取输入设备的vid和pid
    QProcess 进程类—调用外部程序
    Q_INVOKABLE与invokeMethod用法全解
    QML插件扩展2(基于C++的插件扩展)
    leetcode第一刷_Word Search
    设计模式之抽象工厂模式
    Python Random随机数
    【X240 QQ视频对方听不到声音】解决方法
  • 原文地址:https://www.cnblogs.com/yajunLi/p/7145469.html
Copyright © 2020-2023  润新知