GCD中的dispatch_barrier_(a)sync加強(qiáng)對(duì)sync中所謂等待的理解

首先解釋下標(biāo)題里地括號(hào)是什么意思溶推,GCD有個(gè)函數(shù)叫dispatch_barrier_async,還有個(gè)函數(shù)叫dispatch_barrier_sync,這個(gè)括號(hào)只是用來防止標(biāo)題取得太長(zhǎng)…>_<

對(duì)于dispatch_barrier_async可能有的朋友沒用過铣减,不知道它是干嘛的,簡(jiǎn)單地介紹一下下脚作,知道的朋友可以跳過此段葫哗。

假設(shè)我們?cè)扔?個(gè)任務(wù)要執(zhí)行,我們現(xiàn)在要插入一個(gè)任務(wù)0,這個(gè)任務(wù)0要在1劣针、2桨螺、3都并發(fā)執(zhí)行完了之后才能執(zhí)行,而4酿秸、5灭翔、6號(hào)任務(wù)要在這個(gè)任務(wù)0結(jié)束后才允許并發(fā)。大致的意思就跟下面這個(gè)圖一樣

對(duì)于這樣一種需求辣苏,很多朋友的第一反應(yīng)就是用個(gè)group就解決了肝箱。確實(shí)如此,但是系統(tǒng)提供了一種更加簡(jiǎn)單地方法稀蟋,那就是dispatch_barrier_async煌张,我們只要按照前面所述的順序?qū)⑷蝿?wù)分配到隊(duì)列就OK,剩下的都不用管了退客。dispatch_barrier_async的參數(shù)跟dispatch_async一模一樣的骏融。

下面開始講正題

總結(jié)前面所說,dispatch_barrier_async是會(huì)等待前面提到的任務(wù)0結(jié)束的萌狂,注意這里是async档玻。說到等待大家必然會(huì)想到dispatch_sync,dispatch_sync的任務(wù)是串行的茫藏,會(huì)等待任務(wù)結(jié)束程序再繼續(xù)往下走误趴。那dispatch_barrier是否存在一個(gè)sync的方法呢?存在……那么問題來了……那dispatch_barrier_async和dispatch_barrier_sync的區(qū)別在哪呢务傲?如果沒有區(qū)別的話蘋果何必搞出2個(gè)函數(shù)呢凉当,區(qū)別必然是有的。

先貼上代碼售葡,代碼非常簡(jiǎn)單看杭,就是按照之前提的需求寫的。

barrier里給了一個(gè)比較費(fèi)時(shí)的操作便于看清楚

給的圖里寫的是dispatch_barrier_sync挟伙,因?yàn)槲覀冃枰瓤纯次覀兪煜さ牡却猻ync是什么效果楼雹,直接跑起來

可以看到,確實(shí)是1像寒、2烘豹、3號(hào)任務(wù)并發(fā)執(zhí)行完了瓜贾,然后再執(zhí)行的我們的0號(hào)任務(wù)诺祸,再并發(fā)執(zhí)行的4、5祭芦、6號(hào)任務(wù)筷笨,當(dāng)然,point3和barrier之間是有明顯停頓的,截圖無法表現(xiàn)胃夏。對(duì)于這個(gè)輸出轴或,應(yīng)該是意料之中的。截下來仰禀,我們來看看async的效果

代碼進(jìn)行一點(diǎn)點(diǎn)修改照雁,dispatch_barrier_sync改成dispatch_barrier_async。我這里先把a(bǔ)aa答恶、bbb的輸出隱藏掉饺蚊。改完代碼可以直接跑起來,我們一起看看結(jié)果

好像除了aaa悬嗓、bbb之外其它的都跟上面sync的情況一模一樣(當(dāng)然污呼,并發(fā)的順序無法控制),而且point3和barrier之間同樣有明顯停頓,看來包竹,這個(gè)dispatch_barrier_async確實(shí)會(huì)等待它的任務(wù)0執(zhí)行完燕酷。

既然這樣那dispatch_barrier_async和dispatch_barrier_sync究竟有什么區(qū)別呢?我們把a(bǔ)aa周瞎、bbb的輸出打開看看就知道了苗缩。

區(qū)別很明顯,跟sync的情況相比声诸,aaa挤渐、bbb的輸出位置完全不同,async的時(shí)候aaa的輸出在任務(wù)0結(jié)束之前双絮,sync的aaa輸出在任務(wù)0結(jié)束之后浴麻。

好了,說到這應(yīng)該差不多能想通了囤攀,我們開始總結(jié)

dispatch_barrier_sync和dispatch_barrier_async的共同點(diǎn):

1软免、都會(huì)等待在它前面插入隊(duì)列的任務(wù)(1、2焚挠、3)先執(zhí)行完

2膏萧、都會(huì)等待他們自己的任務(wù)(0)執(zhí)行完再執(zhí)行后面的任務(wù)(4、5蝌衔、6)

dispatch_barrier_sync和dispatch_barrier_async的不共同點(diǎn):

在將任務(wù)插入到queue的時(shí)候榛泛,dispatch_barrier_sync需要等待自己的任務(wù)(0)結(jié)束之后才會(huì)繼續(xù)程序,然后插入被寫在它后面的任務(wù)(4噩斟、5曹锨、6),然后執(zhí)行后面的任務(wù)

而dispatch_barrier_async將自己的任務(wù)(0)插入到queue之后剃允,不會(huì)等待自己的任務(wù)結(jié)束沛简,它會(huì)繼續(xù)把后面的任務(wù)(4齐鲤、5、6)插入到queue

所以椒楣,dispatch_barrier_async的不等待(異步)特性體現(xiàn)在將任務(wù)插入隊(duì)列的過程给郊,它的等待特性體現(xiàn)在任務(wù)真正執(zhí)行的過程。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捧灰,一起剝皮案震驚了整個(gè)濱河市淆九,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毛俏,老刑警劉巖吩屹,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拧抖,居然都是意外死亡煤搜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門唧席,熙熙樓的掌柜王于貴愁眉苦臉地迎上來擦盾,“玉大人,你說我怎么就攤上這事淌哟〖B” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵徒仓,是天一觀的道長(zhǎng)腐碱。 經(jīng)常有香客問我,道長(zhǎng)掉弛,這世上最難降的妖魔是什么症见? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮殃饿,結(jié)果婚禮上谋作,老公的妹妹穿的比我還像新娘。我一直安慰自己乎芳,他們只是感情好遵蚜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奈惑,像睡著了一般吭净。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肴甸,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天寂殉,我揣著相機(jī)與錄音,去河邊找鬼雷滋。 笑死不撑,一個(gè)胖子當(dāng)著我的面吹牛文兢,可吹牛的內(nèi)容都是我干的晤斩。 我是一名探鬼主播焕檬,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼澳泵!你這毒婦竟也來了实愚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤兔辅,失蹤者是張志新(化名)和其女友劉穎腊敲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體维苔,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碰辅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了介时。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片没宾。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沸柔,靈堂內(nèi)的尸體忽然破棺而出循衰,到底是詐尸還是另有隱情,我是刑警寧澤褐澎,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布会钝,位于F島的核電站,受9級(jí)特大地震影響工三,放射性物質(zhì)發(fā)生泄漏迁酸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一俭正、第九天 我趴在偏房一處隱蔽的房頂上張望胁出。 院中可真熱鬧,春花似錦段审、人聲如沸全蝶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抑淫。三九已至,卻和暖如春姥闪,著一層夾襖步出監(jiān)牢的瞬間始苇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工筐喳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留催式,地道東北人函喉。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像荣月,于是被迫代替她去往敵國(guó)和親管呵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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

  • Pthread 1.一套通用的多線程API2.適用于Unix哺窄、Linux捐下、Windows 的系統(tǒng)3.跨平臺(tái)、可移植...
    Zsz丶少閱讀 307評(píng)論 0 0
  • 目錄:iOS多線程(一)--pthread萌业、NSThreadiOS多線程(二)--GCD詳解iOS多線程(三)--...
    Claire_wu閱讀 1,075評(píng)論 0 6
  • iOS中GCD的使用小結(jié) 作者dullgrass 2015.11.20 09:41*字?jǐn)?shù) 4996閱讀 20199...
    DanDanC閱讀 832評(píng)論 0 0
  • 這幾天有機(jī)會(huì)去到重慶坷襟,重慶作為直轄市確實(shí)發(fā)展的很好。市中心基本完成開發(fā)建設(shè)生年,高樓林立婴程,街道干凈整潔。尤其是夜晚的重...
    門前池塘閱讀 226評(píng)論 0 0
  • 本文包括:1抱婉、分頁技術(shù)概述2档叔、實(shí)現(xiàn)分頁3、完善分業(yè)——分頁工具條4授段、幾種常見的分頁工具條 1蹲蒲、分頁技術(shù)概述 物理分...
    廖少少閱讀 4,439評(píng)論 0 38