我试着理解GCD并写了这段代码来找出运行优先级:
override func viewDidLoad() {
super.viewDidLoad()
fetchImage()
print(1)
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) {
print(2)
}
dispatch_async(dispatch_get_main_queue()) {
print(3)
}
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) {
print(5)
}
}
字符串
我在控制台中得到了下一个结果:
1
2
5
3
所以问题是:
第1部分:为什么3在5之后(main_queue的优先级最高?)
**第二部分:为什么2比3和5更高?
谢谢你们!
2条答案
按热度按时间yws3nbqq1#
请记住:这是多线程,在多核设备上,将输出写入日志,您不知道线程安全和内部管理...
上面写着:
QOS_CLASS_USER_INTERACTIVE
~=主线程优先级)注意,我说~=是因为我还没有检查确切的值,它可能会略有不同,尽管我希望优先级值匹配,否则'interactive'就没有什么意义了...
ha5z0ras2#
其结果是优先级的顺序。
QOS_CLASS_USER_INTERACTIVE
表示用户为地面进程,因此优先级最高QOS_CLASS_USER_INITIATED
表示用户正在等待作业的结果,因此优先级非常高。当用户看到所有内容及其作业时,主队列是正常的工作负载。