GCD子隊(duì)列的優(yōu)先級(jí)

概述
本篇來研究一下GCD中的子隊(duì)列如何設(shè)置優(yōu)先級(jí)。我們知道全局隊(duì)列可以有四種優(yōu)先級(jí)可以設(shè)置引有,而我們自己創(chuàng)建的隊(duì)列并沒有參數(shù)可以指定優(yōu)先級(jí),那么我們有辦法做到按優(yōu)先級(jí)來執(zhí)行任務(wù)嗎?
通過本篇文章蜂桶,您將學(xué)習(xí)到以下知識(shí)點(diǎn):
如何創(chuàng)建子隊(duì)列
如何給子隊(duì)列添加優(yōu)先級(jí)

如何設(shè)置子隊(duì)列

蘋果提供了一個(gè)設(shè)置子隊(duì)列的API:dispatch_set_target_queue,通過它可以設(shè)置調(diào)整目標(biāo)隊(duì)列也切,比如我們可以設(shè)置目標(biāo)隊(duì)列為全局隊(duì)列扑媚,那么這個(gè)全局隊(duì)列可以先設(shè)置優(yōu)先級(jí)妥曲,如此就可以解決子隊(duì)列優(yōu)先級(jí)的問題。比如下面這樣設(shè)置:
// 將serialQueue放到優(yōu)先級(jí)為L(zhǎng)OW的全局隊(duì)列中作為子隊(duì)列钦购,
// 那么子隊(duì)列的優(yōu)先級(jí)也會(huì)跟著成為L(zhǎng)OW優(yōu)級(jí)

dispatch_queue_t serialQueue = dispatch_queue_create("T-bag",
                                                     DISPATCH_QUEUE_SERIAL);
dispatch_set_target_queue(serialQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0));

dispatch_async(serialQueue, ^{
    NSLog(@"serialQueue1");
});
dispatch_async(serialQueue, ^{
    NSLog(@"serialQueue2");
});
dispatch_async(serialQueue, ^{
    NSLog(@"serialQueue3");
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSLog(@"優(yōu)先級(jí)高-global_queue4");
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSLog(@"優(yōu)先級(jí)高-global_queue5");
});

打印效果圖如下:

Paste_Image.png

我們把串行隊(duì)列放到了優(yōu)先級(jí)為L(zhǎng)OW的全局隊(duì)列中檐盟,另外還把任務(wù)4、5放到優(yōu)先級(jí)為DEFAULT的全局隊(duì)列中押桃,所以優(yōu)先執(zhí)行任務(wù)4葵萎、5,最后才執(zhí)行優(yōu)先級(jí)為低的串行隊(duì)列中的任務(wù)唱凯。
所以這里設(shè)置了優(yōu)先級(jí)后羡忘,隊(duì)列就不一定是按FIFO規(guī)則了,出隊(duì)的順序就變成了按優(yōu)先級(jí)了磕昼。只有當(dāng)所有的任務(wù)都是同一個(gè)優(yōu)先級(jí)的情況下卷雕,才是FIFO。

并發(fā)子隊(duì)列優(yōu)先級(jí)

dispatch_queue_t concurrencyQueue = dispatch_queue_create("T-bag",              DISPATCH_QUEUE_CONCURRENT);
// 放到全局隊(duì)列票从,設(shè)置優(yōu)先級(jí)為L(zhǎng)OW
dispatch_set_target_queue(concurrencyQueue,
                     dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0));

dispatch_async(concurrencyQueue, ^{
    NSLog(@"concurrencyQueue1");
});
dispatch_async(concurrencyQueue, ^{
    NSLog(@"concurrencyQueue2");
});
dispatch_async(concurrencyQueue, ^{
    NSLog(@"concurrencyQueue3");
});
dispatch_async(concurrencyQueue, ^{
    NSLog(@"concurrencyQueue4");
});
dispatch_async(concurrencyQueue, ^{
    NSLog(@"concurrencyQueue5");
});

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSLog(@"global_queue1");
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSLog(@"global_queue2");
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSLog(@"global_queue3");
});

打印的結(jié)果如下:

Paste_Image.png

從打印結(jié)果來看漫雕,任務(wù)global_queue1、global_queue2峰鄙、global_queue3是相同優(yōu)先級(jí)且是最高的浸间,所以這三個(gè)任務(wù)優(yōu)先執(zhí)行,并不是按FIFO來出隊(duì)執(zhí)行了吟榴。子隊(duì)列被優(yōu)先放入全局隊(duì)列中魁蒜,按道理說它應(yīng)該優(yōu)先出列然后執(zhí)行任務(wù),但是現(xiàn)在并不是這樣子吩翻。所以FIFO是有條件的兜看,那就是優(yōu)先級(jí)相同的情況下才會(huì)這樣。如果出現(xiàn)優(yōu)先級(jí)不同狭瞎,則會(huì)按優(yōu)先級(jí)高的先出隊(duì)執(zhí)行细移。

并發(fā)隊(duì)列執(zhí)行任務(wù)的順序是不確定的。對(duì)于同一優(yōu)先級(jí)的任務(wù)脚作,他們出隊(duì)的順序一定是FIFO葫哗,先進(jìn)先出,但是先執(zhí)行的順序是不確定的球涛!

從效果圖可以看出來劣针,同一優(yōu)先級(jí)的g1、g2亿扁、g3表現(xiàn)出了執(zhí)行的順序是亂的捺典。同樣,同一優(yōu)先級(jí)的c1~c5也表現(xiàn)也執(zhí)行的順序是亂的从祝,也就是隨機(jī)性襟己!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末引谜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子擎浴,更是在濱河造成了極大的恐慌员咽,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贮预,死亡現(xiàn)場(chǎng)離奇詭異贝室,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仿吞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門滑频,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人唤冈,你說我怎么就攤上這事峡迷。” “怎么了你虹?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵绘搞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我售葡,道長(zhǎng)看杭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任挟伙,我火速辦了婚禮,結(jié)果婚禮上模孩,老公的妹妹穿的比我還像新娘尖阔。我一直安慰自己,他們只是感情好榨咐,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布介却。 她就那樣靜靜地躺著,像睡著了一般块茁。 火紅的嫁衣襯著肌膚如雪齿坷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天数焊,我揣著相機(jī)與錄音永淌,去河邊找鬼。 笑死佩耳,一個(gè)胖子當(dāng)著我的面吹牛遂蛀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播干厚,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼李滴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼螃宙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起所坯,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谆扎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后芹助,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堂湖,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年周瞎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苗缩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡声诸,死狀恐怖酱讶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情彼乌,我是刑警寧澤泻肯,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站慰照,受9級(jí)特大地震影響灶挟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜毒租,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一稚铣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧墅垮,春花似錦惕医、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至灾梦,卻和暖如春峡钓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背若河。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工能岩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牡肉。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓捧灰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毛俏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容