2013-04-09 93 views
6

GCD根據4個全局優先級隊列(高,默認,低,背景)啓用塊調度。 我有幾個NSOperationQueues在我的應用程序,但希望運行在不同的優先級。據我所知,NSOperationQueue是一個關於GCD的抽象,並且希望爲NSOperationQueue設置不同的優先級(類似於GCD優先級隊列)。有沒有辦法做到這一點? (發現它可以設置一個操作的優先級,但不是隊列本身)。將優先級設置爲NSOperationQueue

回答

1

來自NSOperationQueue Class Reference的報價。在隊列內

操作(但尚未執行的)本身 根據優先級等級和交互操作對象 依賴性組織,並且相應地執行。

操作間依賴關係爲 操作提供絕對執行順序,即使這些操作位於不同的 操作隊列中。操作對象不被視爲準備好執行,直到其所有從屬操作完成執行。 對於那些準備執行操作,操作隊列總是 執行一個優先相對於其他準備 操作最高。

這意味着通過設計,您不能爲隊列設置優先級,但NSOperationQueue將根據操作的單獨優先級爲各個操作使用GCD全局隊列。

+0

不,NSOperationQueue只使用一個GCD全局隊列,默認優先級爲1。 NSOperation優先的概念是不相關的。 – das 2013-04-10 02:09:05

+0

我沒有聲稱它使用具有不同優先級的GCD全局隊列。我所說的並且意在說的是,它依賴於操作的個人優先級來執行任務。 @das – svena 2013-04-10 05:05:02

+0

好吧,你提到的'GCD全球隊列'(複數)讓我印象深刻 – das 2013-04-10 06:10:08

-2

嘗試在您添加到隊列中NSOperations設置threadPriority

+1

已棄用,且僅適用於OS X – 2015-05-13 08:47:24

5

與iOS 8開始,NSOperationQueue有qualityOfService屬性,它做什麼,我覺得OP的意思。來自Class Reference

此屬性指定應用於添加到隊列的操作對象 的服務級別。如果操作對象具有顯式服務 級別集,則會使用該值。 [...]

服務級別會影響操作對象爲 的優先級,因爲該系統資源可以訪問系統資源,例如CPU時間,網絡資源,磁盤資源等等。對服務質量較高的操作 級別給予比系統資源更高的優先級,以便它們可以更快地執行其任務。您使用服務級別來確保 響應明確的用戶請求的操作的優先級低於關鍵性較低的工作。

同樣在iOS 8中,您可以更改使用哪個GCD隊列與underlyingQueue屬性,並因此選擇具有所需優先級的全局GCD隊列。