Swift3 GCD队列优先级说明
2024-09-16 06:06:31
从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
~
最新文章
- dom4j解析xml作为测试数据
- Cassandra1.2文档学习(18)—— CQL数据模型(下)
- 【转链接】Handlebars模板引擎以及浅谈模板引擎的实现原理
- 查看本机IP地址及子网掩码(netmask)
- BZOJ_4196_[NOI2015]_软件包管理器_(树链剖分)
- Destoon标签使用技巧十则
- css系列教程--简介及基础语法和注意事项
- Android Java混淆(ProGuard)
- Part 1:请求与响应--Django从入门到精通系列教程
- Linux 桌面玩家指南:05. 发博客必备的图片处理和视频录制神器
- JAVA新的一天
- SDWebImage之SDWebImageCompat
- linux安装curl扩展
- python之路---09 初始函数 参数
- iOS开发--画一条黑色的横线
- day12 python学习 装饰器
- 固定UIScrollView滑动的方向
- PHP 生成条形码
- 【CodeForces】889 B. Restoration of string
- GCD学习(五) dispatch_barrier_async