什么是GCD

什么是GCD

Grand Central Dispatch(GCD)是蘋(píng)果開(kāi)發(fā)的一個(gè)多核編程的解決方法。該方法在 MacOSX10.6(雪豹)中首次推出,并隨后被引入到了 iOS4.0 中蹦疑。 GCD 和起其他的多線程技術(shù)方案,如NSthread、NSOperationQueue、NSInvocationOperation 等技術(shù)相比,使用起來(lái)更加方便。

GCD的優(yōu)勢(shì)

  • GCD是蘋(píng)果公司為多核的并行運(yùn)算提出的解決方案
  • 會(huì)自動(dòng)利用更多的CPU內(nèi)存
  • 會(huì)自動(dòng)管理線程的生命周期
  • 程序員只需要告訴GCD想要執(zhí)行什么任務(wù)罪治,不需要編寫(xiě)任何線程管理代碼

GCD的兩個(gè)核心概念

  • 任務(wù):執(zhí)行什么操作
  • 隊(duì)列:用來(lái)存放任務(wù)

GCD的使用步驟

  • 定制任務(wù)
  • 將任務(wù)添加到隊(duì)列中
GCD的使用

GCD中有兩個(gè)用來(lái)執(zhí)行任務(wù)的常用函數(shù)
用同步的方式執(zhí)行任務(wù)
只能在當(dāng)前線程中執(zhí)行任務(wù),不具備開(kāi)啟新線程的能力

dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);

用異步的方式執(zhí)行任務(wù)
可以在新的線程中執(zhí)行任務(wù)礁蔗,具備開(kāi)啟新的線程的能力

dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

GCD中還有個(gè)用來(lái)執(zhí)行任務(wù)的函數(shù):

dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block);

在前面的任務(wù)執(zhí)行結(jié)束后它才執(zhí)行觉义,而且它后面的任務(wù)等它執(zhí)行完成之后才會(huì)執(zhí)行

GCD的隊(duì)列類(lèi)型
并發(fā)隊(duì)列類(lèi)型(Concurrent Dispatch Queue)
  • 可以讓多個(gè)任務(wù)并發(fā)(同時(shí))執(zhí)行(自動(dòng)開(kāi)啟多個(gè)線程同時(shí)執(zhí)行任務(wù))
  • 并發(fā)功能只有在異步(dispatch_async)函數(shù)下才有效

使用dispatch_queue_create函數(shù)創(chuàng)建隊(duì)列

dispatch_queue_t  dispatch_queue_create(const char *label, //隊(duì)列名稱 
dispatch_queue_attr_t attr);//隊(duì)列的類(lèi)型

創(chuàng)建并發(fā)隊(duì)列

dispatch_queue_t queue = dispatch_queue_create("com.abc.queue", DISPATCH_QUEUE_CONCURRENT);

GCD默認(rèn)提供了全局的并發(fā)隊(duì)列,供整個(gè)應(yīng)用使用浴井,無(wú)需手動(dòng)創(chuàng)建
使用 dispatch_get_global_queue 函數(shù)獲得全局的并發(fā)隊(duì)列

dispatch_queue_t dispatch_get_global_queue(
dispatch_queue_priority_t priority, // 隊(duì)列的優(yōu)先級(jí)
unsigned long flags); // 此參數(shù)暫時(shí)無(wú)用晒骇,用0即可

獲得全局并發(fā)隊(duì)列

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

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

#define DISPATCH_QUEUE_PRIORITY_HIGH 2// 高
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默認(rèn)(中)
#define DISPATCH_QUEUE_PRIORITY_LOW (-2)// 低
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN// 后臺(tái)
串行隊(duì)列(Serial Dispatch Queue)

讓任務(wù)一個(gè)接著一個(gè)地執(zhí)行(一個(gè)任務(wù)執(zhí)行完畢后,再執(zhí)行下一個(gè)任務(wù))

  • 使用dispatch_queue_create函數(shù)創(chuàng)建串行隊(duì)列
//創(chuàng)建串行隊(duì)列(隊(duì)列類(lèi)型傳遞NULL或者DISPATCH_QUEUE_SERIAL)
dispatch_queue_t queue = dispatch_queue_create("com.abc.queue", NULL);
  • 使用主隊(duì)列
    • 主隊(duì)列是GCD自帶的一種特殊的串行隊(duì)列
    • 放在主隊(duì)列中的任務(wù),都會(huì)放到主線程中執(zhí)行
    • 使用dispatch_get_main_queue()獲得主隊(duì)列
dispatch_queue_t queue = dispatch_get_main_queue();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洪囤,一起剝皮案震驚了整個(gè)濱河市徒坡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘤缩,老刑警劉巖喇完,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異剥啤,居然都是意外死亡锦溪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)府怯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)刻诊,“玉大人,你說(shuō)我怎么就攤上這事牺丙≡蜓模” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵赘被,是天一觀的道長(zhǎng)是整。 經(jīng)常有香客問(wèn)我,道長(zhǎng)民假,這世上最難降的妖魔是什么浮入? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮羊异,結(jié)果婚禮上事秀,老公的妹妹穿的比我還像新娘。我一直安慰自己野舶,他們只是感情好易迹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著平道,像睡著了一般睹欲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上一屋,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天窘疮,我揣著相機(jī)與錄音,去河邊找鬼冀墨。 笑死闸衫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诽嘉。 我是一名探鬼主播蔚出,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼弟翘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了骄酗?” 一聲冷哼從身側(cè)響起稀余,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酥筝,沒(méi)想到半個(gè)月后滚躯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘿歌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年掸掏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宙帝。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丧凤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出步脓,到底是詐尸還是另有隱情愿待,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布靴患,位于F島的核電站仍侥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鸳君。R本人自食惡果不足惜农渊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望或颊。 院中可真熱鬧砸紊,春花似錦、人聲如沸囱挑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)平挑。三九已至游添,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間通熄,已是汗流浹背否淤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棠隐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓檐嚣,卻偏偏與公主長(zhǎng)得像助泽,于是被迫代替她去往敵國(guó)和親啰扛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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