2017-06-04 39 views
0

我遇到的問題是爲什麼下面的代碼打印出來的優先級是一樣的?爲什麼是這樣?非常感謝你。iOS GCD全局隊列優先級都是0.5

print("main:\(Thread.current)") 
    print("thread main priorities:\(Thread.current.threadPriority)") 

    DispatchQueue.global(qos: .utility).async { 
     print("utility:\(Thread.current)") 
     print("thread utility priorities:\(Thread.current.threadPriority)") 
    } 

    DispatchQueue.global(qos: .background).async { 
     print("background:\(Thread.current)") 
     print("thread background priorities:\(Thread.current.threadPriority)") 
    } 

    DispatchQueue.global(qos: .userInteractive).async { 
     print("userInteractive:\(Thread.current)") 
     print("thread userInteractive priorities:\(Thread.current.threadPriority)") 
    } 

    DispatchQueue.global(qos: .userInitiated).async { 
     print("userInitiated:\(Thread.current)") 
     print("thread userInitiated priorities:\(Thread.current.threadPriority)") 
    } 

日誌:

主:{數= 1,姓名=主} 螺紋主要優先:0.5

userInteractive:{數= 3,名稱=(空)}

實用程序:{number = 5,name =(null)}

背景:{number = 6,name =(null)}

螺紋userInteractive優先級:0.5

用戶引發:{數= 4,名稱=(空)}

螺紋效用優先級:0.5

螺紋背景優先級:0.5

螺紋用戶引發的優先級: 0.5

回答

0

正如你可以在文檔中看到:

@available(iOS 4.0, *) 
open var threadPriority: Double // To be deprecated; use qualityOfService below 

threadPriority已棄用。另外,Apple的GCD團隊在線程隊列主題上已經非常清楚。 GCD將爲您管理線程。隊列優先級不是線程優先級。看看這個例子,這是你在這裏發佈的代碼,我剛剛添加了「qos_class_self()。rawValue」,這實際上應該如何測試QoS,而不是使用「threadPriority」。

print("main:\(Thread.current), Thread main priorities:\(Thread.current.threadPriority), QoS: \(qos_class_self().rawValue)") 

DispatchQueue.global(qos: .utility).async { 
    print("utility:\(Thread.current), Thread utility priorities:\(Thread.current.threadPriority), QoS: \(qos_class_self().rawValue)") 
} 

DispatchQueue.global(qos: .background).async { 
    print("background:\(Thread.current), Thread background priorities:\(Thread.current.threadPriority), QoS: \(qos_class_self().rawValue)") 
} 

DispatchQueue.global(qos: .userInteractive).async { 
    print("userInteractive:\(Thread.current), Thread userInteractive priorities:\(Thread.current.threadPriority), QoS: \(qos_class_self().rawValue)") 
} 

DispatchQueue.global(qos: .userInitiated).async { 
    print("userInitiated:\(Thread.current), Thread userInitiated priorities:\(Thread.current.threadPriority), QoS: \(qos_class_self().rawValue)") 
} 

我也結合每封版畫所以它們不會在日誌中的不同線路加擾。這表明您保持了QoS,而不推薦使用threadPriority。

main:<NSThread: 0x6100000762c0>{number = 1, name = main}, Thread main priorities:0.5, QoS: 33 
userInteractive:<NSThread: 0x610000261fc0>{number = 4, name = (null)}, Thread userInteractive priorities:0.5, QoS: 33 
utility:<NSThread: 0x618000079100>{number = 3, name = (null)}, Thread utility priorities:0.5, QoS: 17 
userInitiated:<NSThread: 0x608000078380>{number = 5, name = (null)}, Thread userInitiated priorities:0.5, QoS: 25 
background:<NSThread: 0x610000262000>{number = 6, name = (null)}, Thread background priorities:0.5, QoS: 9 

因此,在結束時,帶走的是不去想在主題方面,而且在隊列中,其服務質量的角度考慮,並知道GCD將管理線程爲您服務。與隊列中出現GCD之前我們習慣的概念截然不同。