global_queue 和 qos_class_user_interactive
global_queue with qos_class_user_interactive
我试图理解 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 部分:为什么 2 也高于 3 和 5?
谢谢大家!
切记:这是多线程,在多核设备上,将输出写到一个你不知道线程安全和内部管理的日志...
也就是说:
- 1 是第一个,因为它是同步的
- 2 是第二个,因为它也是同步的
- 3 不是下一个,因为它被推入主线程 运行 循环中等待 运行 的事物队列中,而您不知道该队列中已经有什么其他东西
- 5 在 3 之前,因为它(基本上)具有相同的优先级,但它 运行 在一个可能没有其他等待的队列上(
QOS_CLASS_USER_INTERACTIVE
~= 主线程优先级)
注意,我说 ~= 是因为我没有检查确切的值,虽然我希望优先级值匹配,但它可能略有不同,否则 'interactive' 意义不大...
我试图理解 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 部分:为什么 2 也高于 3 和 5?
谢谢大家!
切记:这是多线程,在多核设备上,将输出写到一个你不知道线程安全和内部管理的日志...
也就是说:
- 1 是第一个,因为它是同步的
- 2 是第二个,因为它也是同步的
- 3 不是下一个,因为它被推入主线程 运行 循环中等待 运行 的事物队列中,而您不知道该队列中已经有什么其他东西
- 5 在 3 之前,因为它(基本上)具有相同的优先级,但它 运行 在一个可能没有其他等待的队列上(
QOS_CLASS_USER_INTERACTIVE
~= 主线程优先级)
注意,我说 ~= 是因为我没有检查确切的值,虽然我希望优先级值匹配,但它可能略有不同,否则 'interactive' 意义不大...