GCD中dispatch_set_target_queue使用全解

用法一:指定優(yōu)先級

系統(tǒng)的Global Queue是可以指定優(yōu)先級的乾蛤,那我們可以用到dispatch_set_target_queue這個方法來指定自己創(chuàng)建隊列的優(yōu)先級
在這里我們解釋一下:dispatch_queue_create函數(shù)生成的DisPatch Queue不管是Serial DisPatch Queue還是Concurrent Dispatch Queue,執(zhí)行的優(yōu)先級都與默認優(yōu)先級的Global Dispatch queue相同,如果需要變更生成的Dispatch Queue的執(zhí)行優(yōu)先級則需要使用dispatch_set_target_queue函數(shù)

代碼用法一:

dispatch_queue_t serialDiapatchQueue=dispatch_queue_create("com.GCD_demo.www", DISPATCH_QUEUE_SERIAL);
    dispatch_queue_t dispatchgetglobalqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
    
    // 第一個參數(shù)為要設置優(yōu)先級的queue,第二個參數(shù)是參照物,既將第一個queue的優(yōu)先級和第二個queue的優(yōu)先級設置一樣叶眉。
    dispatch_set_target_queue(serialDiapatchQueue, dispatchgetglobalqueue);
    
    
    dispatch_async(serialDiapatchQueue, ^{
        NSLog(@"我優(yōu)先級低慷妙,先讓讓");
    });
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"我優(yōu)先級高,我先block");
    });

打印結(jié)果:
2017-05-04 11:08:49.388 Practice_Animation[1408:539481] 我優(yōu)先級高,我先block
2017-05-04 11:08:49.388 Practice_Animation[1408:539185] 我優(yōu)先級低僻焚,先讓讓

用法二:隊列執(zhí)行

2、dispatch_set_target_queue除了能用來設置隊列的優(yōu)先級之外膝擂,還能夠創(chuàng)建隊列的層次體系虑啤,當我們想讓不同隊列中的任務同步的執(zhí)行時,我們可以創(chuàng)建一個串行隊列架馋,然后將這些隊列的target指向新創(chuàng)建的隊列即可
解讀使用dispatch_set_target_queue將多個串行的queue指定到了同一目標狞山,那么著多個串行queue在目標queue上就是同步執(zhí)行的,不再是并行執(zhí)行叉寂。

    //1.創(chuàng)建目標隊列
    dispatch_queue_t targetQueue = dispatch_queue_create("test.target.queue", DISPATCH_QUEUE_SERIAL);
    
    //2.創(chuàng)建3個串行隊列
    dispatch_queue_t queue1 = dispatch_queue_create("test.1", DISPATCH_QUEUE_SERIAL);
    dispatch_queue_t queue2 = dispatch_queue_create("test.2", DISPATCH_QUEUE_SERIAL);
    dispatch_queue_t queue3 = dispatch_queue_create("test.3", DISPATCH_QUEUE_SERIAL);
    
    //3.將3個串行隊列分別添加到目標隊列
    dispatch_set_target_queue(queue1, targetQueue);
    dispatch_set_target_queue(queue2, targetQueue);
    dispatch_set_target_queue(queue3, targetQueue);
    
    
    dispatch_async(queue1, ^{
        NSLog(@"1 in");
        [NSThread sleepForTimeInterval:3.f];
        NSLog(@"1 out");
    });
    
    dispatch_async(queue2, ^{
        NSLog(@"2 in");
        [NSThread sleepForTimeInterval:2.f];
        NSLog(@"2 out");
    });
    dispatch_async(queue3, ^{
        NSLog(@"3 in");
        [NSThread sleepForTimeInterval:1.f];
        NSLog(@"3 out");
    });

打印結(jié)果:
2017-05-04 11:37:05.638 Practice_Animation[1456:648304] 1 in
2017-05-04 11:37:08.643 Practice_Animation[1456:648304] 1 out
2017-05-04 11:37:08.644 Practice_Animation[1456:648304] 2 in
2017-05-04 11:37:10.649 Practice_Animation[1456:648304] 2 out
2017-05-04 11:37:10.649 Practice_Animation[1456:648304] 3 in
2017-05-04 11:37:11.652 Practice_Animation[1456:648304] 3 out

線程注意事項

生成多個Serial DisPatch Queue時的注意事項

Serial DisPatch Queue是一個串行隊列,只能同時執(zhí)行1個追加處理(即任務),當用Dispatch_queue_create函數(shù)生成多個Serial DisPatch Queue時,每個Serial DisPatch Queue均獲得一個線程,即多個Serial DisPatch Queue可并發(fā)執(zhí)行,同時處理添加到各個Serial DisPatch Queue中的任務,但要注意如果過多地使用多線程,就會消耗大量內(nèi)存,引起大量的上下文切換,大幅度降低系統(tǒng)的響應性能,所以我們只在為了避免多個線程更新相同資源導致數(shù)據(jù)競爭時,使用Serial DisPatch Queue萍启。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市办绝,隨后出現(xiàn)的幾起案子伊约,更是在濱河造成了極大的恐慌,老刑警劉巖孕蝉,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屡律,死亡現(xiàn)場離奇詭異,居然都是意外死亡降淮,警方通過查閱死者的電腦和手機超埋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佳鳖,“玉大人霍殴,你說我怎么就攤上這事∠捣裕” “怎么了来庭?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長穿挨。 經(jīng)常有香客問我月弛,道長,這世上最難降的妖魔是什么科盛? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任帽衙,我火速辦了婚禮,結(jié)果婚禮上贞绵,老公的妹妹穿的比我還像新娘厉萝。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布谴垫。 她就那樣靜靜地躺著章母,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弹渔。 梳的紋絲不亂的頭發(fā)上胳施,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音肢专,去河邊找鬼舞肆。 笑死,一個胖子當著我的面吹牛博杖,可吹牛的內(nèi)容都是我干的椿胯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼剃根,長吁一口氣:“原來是場噩夢啊……” “哼哩盲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狈醉,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤廉油,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后苗傅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抒线,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年渣慕,在試婚紗的時候發(fā)現(xiàn)自己被綠了嘶炭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡逊桦,死狀恐怖眨猎,靈堂內(nèi)的尸體忽然破棺而出傻粘,到底是詐尸還是另有隱情记劝,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布庭敦,位于F島的核電站匿情,受9級特大地震影響兰迫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜码秉,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一逮矛、第九天 我趴在偏房一處隱蔽的房頂上張望鸡号。 院中可真熱鬧转砖,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姓赤,卻和暖如春赡译,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背不铆。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工蝌焚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人誓斥。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓只洒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親劳坑。 傳聞我的和親對象是個殘疾皇子毕谴,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

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