global_queue与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

3

所以问题是:

第1部分 :为什么3是5之后(main_queue具有最高优先级?)

第二部分 :为什么2比3和5要高?

感谢你们!

请记住:这是multithreading,在多核设备上,将输出写入日志,您不知道线程的安全性和内部pipe理…

那就是说:

  1. 1首先是因为它是同步的
  2. 2是次要的,因为它也是同步的
  3. 3不是下一个,因为它被推入等待在主线程运行循环中运行的队列中,并且你不知道该队列中已经有了什么
  4. 5在3之前,因为它(基本上)具有相同的优先级,但它运行在可能没有其他任何东西在等待的队列上( QOS_CLASS_USER_INTERACTIVE =主线程优先级)

请注意,我说〜=因为我没有检查确切的值,它可能略有不同,但我期望的优先级值匹配,否则“互动”并不意味着太多…