Ios 具有qos的全局队列\u类\u用户\u交互
我试图理解GCD,并编写了以下代码以了解运行优先级:Ios 具有qos的全局队列\u类\u用户\u交互,ios,swift,grand-central-dispatch,Ios,Swift,Grand Central Dispatch,我试图理解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
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部分:为什么3在5之后(主队列具有最高优先级?)
第二部分:为什么2也比3和5高
谢谢你们 请记住:这是多线程,在多核设备上,将输出写入日志,而您不知道线程安全和内部管理 也就是说:
QOS\u CLASS\u USER\u INTERACTIVE
~=主线程优先级)注意,我说~=是因为我没有检查确切的值,虽然我希望优先级值匹配,但它可能略有不同,否则“交互式”就没有多大意义了……这可能是在主线程上运行的。你是想让2同步还是错过了a?@Wain谢谢,错过了。但结果是一样的。也许你是对的,但为什么优先级较低的任务会首先运行?谢谢你的回答!所以,如果我说主队列和全局队列的优先级是QOS类用户,我会说是错的?如果我把2改为异步,什么都不会改变。因此,即使2是异步的,它也会在3和5之前,尽管它是QOS启动的。确切的顺序并不难,也不快,而且你要求操作系统运行的东西非常小,基本上不需要时间,所以它只需要运行它们。当你进入耗时的任务时,优先级将开始发挥更大的作用。你的意思是,如果我在相同的条件下执行比打印功能更重的操作,它们将打印其他顺序?@Wain 2是如何同步的?上面写着dispatch\u async。