GCD

概念了解一下

含義
特點(diǎn)
組合特點(diǎn)

在組合中昼接,左邊四個(gè)容易理解(一般是獲取系統(tǒng)提供的全局隊(duì)列 dispatch_get_global_queue())虫啥,不再贅述掺逼。

要敘述的是在主隊(duì)列中執(zhí)行同步異步任務(wù)的情況。

主隊(duì)列異步:主隊(duì)列是串行隊(duì)列宋税,只有一個(gè)線程(主線程)摊崭,任務(wù)要順序執(zhí)行,但因?yàn)楫惒降脑蚪苋蝿?wù)創(chuàng)建完畢放在隊(duì)列尾部(FIFO)。代碼可以正常執(zhí)行矮台。

主隊(duì)列同步:死鎖乏屯。

dispatch_sync(dispatch_get_main_queue,  ^(){
      NSLog(@"死鎖");
);

關(guān)于這個(gè)問(wèn)題,網(wǎng)上太多解答了瘦赫。有個(gè)大神用源碼解讀死鎖的問(wèn)題感興趣再點(diǎn)辰晕。
大神的解答太深?yuàn)W,我只記錄一個(gè)能說(shuō)服我的理論就可以了确虱。

主隊(duì)列是串行隊(duì)列含友,只有一個(gè)線程(主線程),任務(wù)要順序執(zhí)行校辩,組合同步任務(wù)的時(shí)候窘问,任務(wù)創(chuàng)建完畢放在隊(duì)列尾部(FIFO)。但是因?yàn)橥饺蝿?wù)的關(guān)系宜咒,任務(wù)創(chuàng)建完就要執(zhí)行惠赫,此刻它會(huì)與主線程搶占資源 -> 主線程要執(zhí)行完它之前的任務(wù)(拿到sync函數(shù)的返回值)再執(zhí)行這個(gè)同步任務(wù)(打印)故黑,而同步任務(wù)要求主線程馬上執(zhí)行(打佣邸)。造成了死鎖场晶。

還有一些小皮們混埠,非要在主線程執(zhí)行同步任務(wù),也不是沒(méi)辦法

“1”
dispatch_async(dispatch_get_global_queue,  ^(){

      NSLog(@"2");

      dispatch_sync(dispatch_get_main_queue,  ^(){
              NSLog(@"3");
       );

      “4”
);

“5”

哇塞 看了諸多解釋后才感覺(jué)有點(diǎn)眉目了诗轻。很多帖子看完了钳宪,有人評(píng)論說(shuō)是觀點(diǎn)是錯(cuò)的。我的媽呀。直到看到這句話

對(duì)于在主線程使套,你可以認(rèn)為每一語(yǔ)句都是將任務(wù)插入主隊(duì)列罐呼。調(diào)用dispatch_sync這個(gè)函數(shù)相當(dāng)于將一個(gè)任務(wù)插入主隊(duì)列,這個(gè)函數(shù)的作用是將一個(gè)任務(wù)插入指定隊(duì)列侦高,當(dāng)這個(gè)函數(shù)里的Block執(zhí)行完畢以后嫉柴,這個(gè)函數(shù)才會(huì)返回,即這個(gè)調(diào)用這個(gè)dispatch_sync的任務(wù)結(jié)束奉呛,主隊(duì)列繼續(xù)往下添加任務(wù)计螺。我上面說(shuō)了,串行的任務(wù)添加后需要等前面的任務(wù)都執(zhí)行完才會(huì)執(zhí)行的瞧壮。所以Block里的任務(wù)需要等dispatch_sync這個(gè)調(diào)用執(zhí)行完才會(huì)執(zhí)行登馒,然而dispatch_sync并不會(huì)返回。
第二個(gè)是創(chuàng)建了一個(gè)空的串行隊(duì)列咆槽,dispatch_sync這個(gè)是主隊(duì)列添加的任務(wù)陈轿,工作是將一個(gè)任務(wù)添加到這個(gè)新創(chuàng)建的隊(duì)列上,由于指定的隊(duì)列前面沒(méi)有其他任務(wù)秦忿,所以這個(gè)任務(wù)先執(zhí)行麦射,然后返回,dispatch_sync返回灯谣,主隊(duì)列繼續(xù)往下添加任務(wù)潜秋。

對(duì)于在全局并行隊(duì)列里面執(zhí)行 主隊(duì)列同步任務(wù) 不會(huì)死鎖的情況。核心的就是sync這個(gè)函數(shù)的代碼寫(xiě)在了全局隊(duì)列里胎许。這個(gè)sync任務(wù)的派發(fā)是在全局隊(duì)列中峻呛,等待這個(gè)函數(shù)返回的是全局隊(duì)列。主隊(duì)列只要負(fù)責(zé)打印即可辜窑。不存在搶占資源的情況钩述。
任務(wù)執(zhí)行順序如下圖(盜的圖)


異步 + 主線程同步

還有特殊的 GCD組

dispatch_group_t group = dispatch_group_create();
    
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    dispatch_group_enter(group);
    
    dispatch_group_async(group, queue, ^{
        
        NSLog(@"1");
        
        dispatch_group_leave(group);
    });
    
    dispatch_group_enter(group);
    
    dispatch_group_async(group, queue, ^{
        
        NSLog(@"2");
        
        dispatch_group_leave(group);
    });
    
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        
    });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谬擦,隨后出現(xiàn)的幾起案子切距,更是在濱河造成了極大的恐慌,老刑警劉巖惨远,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谜悟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡北秽,警方通過(guò)查閱死者的電腦和手機(jī)葡幸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)贺氓,“玉大人蔚叨,你說(shuō)我怎么就攤上這事。” “怎么了蔑水?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵邢锯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我搀别,道長(zhǎng)丹擎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任歇父,我火速辦了婚禮蒂培,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榜苫。我一直安慰自己护戳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布垂睬。 她就那樣靜靜地躺著媳荒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驹饺。 梳的紋絲不亂的頭發(fā)上肺樟,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音逻淌,去河邊找鬼。 笑死疟暖,一個(gè)胖子當(dāng)著我的面吹牛卡儒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俐巴,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼骨望,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了欣舵?” 一聲冷哼從身側(cè)響起擎鸠,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缘圈,沒(méi)想到半個(gè)月后劣光,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糟把,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年绢涡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遣疯。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雄可,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情数苫,我是刑警寧澤聪舒,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站虐急,受9級(jí)特大地震影響箱残,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜戏仓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一疚宇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赏殃,春花似錦敷待、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至抗蠢,卻和暖如春举哟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迅矛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工妨猩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秽褒。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓壶硅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親销斟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庐椒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359