iOS底層探索之多線程(三)—初識(shí)GCD

回顧

在前兩篇博客产喉,已經(jīng)介紹了進(jìn)程線程捂掰,還介紹了自旋鎖互斥鎖等相關(guān)內(nèi)容敢会,在 iOS 開(kāi)發(fā)中,使用最多的還是 GCD这嚣,那么從本篇開(kāi)始講陸續(xù)介紹 GCD鸥昏。

多線程.png

iOS底層探索之多線程(一)—進(jìn)程和線程

iOS底層探索之多線程(二)—線程和鎖

1. 什么是 GCD

GCD定義

Grand Center Dispatch簡(jiǎn)稱GCD,是蘋(píng)果公司開(kāi)發(fā)的技術(shù)疤苹,以優(yōu)化應(yīng)用程序支持多核心處理器互广。

  • C語(yǔ)言,提供了非常多期待的函數(shù)卧土。
  • GCD是蘋(píng)果公司為多核的并行運(yùn)算出的解決方案惫皱。
  • GCD會(huì)自動(dòng)利用更多的CPU內(nèi)核(比如雙核、四核) ,GCD會(huì)自動(dòng)管理線程的生命周期(創(chuàng)建線程缝彬、調(diào)度任務(wù)癣亚、銷毀線程)
  • 程序員只需要告訴GCD想要執(zhí)行什么任務(wù),不需要編寫(xiě)任何線程管理代碼媳谁。

GCD將任務(wù)添加到隊(duì)列,并且指定執(zhí)?任務(wù)的函數(shù)

GCD工作原理

GCD的兩個(gè)核心:任務(wù)隊(duì)列

2. 任務(wù)和隊(duì)列

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

GCD使用的兩個(gè)步驟:創(chuàng)建任務(wù)友酱、將任務(wù)添加到隊(duì)列

  • 創(chuàng)建任務(wù):確定要做的事情
  • 將任務(wù)添加到隊(duì)列中
    • GCD會(huì)自動(dòng)將隊(duì)列中的任務(wù)取出來(lái)晴音,放到對(duì)應(yīng)的線程中去執(zhí)行。
    • 任務(wù)的取出遵循FIFO原則:先進(jìn)先出缔杉,后進(jìn)后出锤躁。
FIFO原則:先進(jìn)先出,后進(jìn)后出

串行隊(duì)列

串行隊(duì)列(Serial Dispatch Queue)或详,任務(wù)一個(gè)接著一個(gè)的執(zhí)行系羞,一個(gè)任務(wù)執(zhí)行完畢后,再執(zhí)行下一個(gè)任務(wù)霸琴,串行隊(duì)列是順序執(zhí)行的椒振。

  • 串行隊(duì)列示意圖:


    串行隊(duì)列

并發(fā)隊(duì)列

并發(fā)隊(duì)列(Concurrent Dispatch Queue),可以讓多個(gè)任務(wù)并發(fā)(同時(shí))執(zhí)行梧乘,自動(dòng)開(kāi)啟多個(gè)線程同時(shí)執(zhí)行任務(wù)澎迎。

并發(fā)功能只有在異步(dispatch_async)函數(shù)下才有效。

  • 并發(fā)隊(duì)列示意圖:
    并發(fā)隊(duì)列

    并發(fā)隊(duì)列选调,先調(diào)度執(zhí)行的不一定先執(zhí)行完成嗡善,這和 CPU分配的時(shí)間有關(guān)系,還和任務(wù)的大小有關(guān)学歧,在分配的時(shí)間內(nèi)沒(méi)有完成罩引,CPU:老鐵你先靠邊站會(huì),讓下一個(gè)哥們先執(zhí)行枝笨,下次分配到你時(shí)間再繼續(xù)執(zhí)行吧袁铐。

3. 函數(shù)

  • 任務(wù)使用 block封裝
  • 任務(wù)的block沒(méi)有參數(shù)也沒(méi)有返回值
  • 執(zhí)行任務(wù)的函數(shù)

異步dispatch_async

  • 不用等待當(dāng)前語(yǔ)句執(zhí)行完畢揭蜒,就可以執(zhí)行下一條語(yǔ)句
  • 會(huì)開(kāi)啟線程執(zhí)行 block的任務(wù)
  • 異步是多線程的代名詞

同步dispatch_sync

  • 必須等待當(dāng)前語(yǔ)句執(zhí)行完畢,才會(huì)執(zhí)行下一條語(yǔ)句
  • 不會(huì)開(kāi)啟線程
  • 在當(dāng)前執(zhí)行block的任務(wù)

(1) 讓程序平行排隊(duì)的特定任務(wù)剔桨,根據(jù)可用的處理資源屉更,安排他們?cè)谌魏慰捎玫?code>處理器核心上執(zhí)行任務(wù) 。

(2) 一個(gè)任務(wù)可以是一個(gè)函數(shù)洒缀,是一個(gè)閉包體GCD的底層此意使 用線程實(shí)現(xiàn)的,不過(guò)這樣可以讓程序員不用關(guān)注實(shí)現(xiàn)的細(xì)節(jié)瑰谜。

(3) GCD中必須要使用的是各種隊(duì)列,我們遇過(guò)block树绩,把具體的代碼放到隊(duì)列中萨脑,隊(duì)列中的任務(wù)排隊(duì)執(zhí)行,系統(tǒng)會(huì)自動(dòng)的把隊(duì)列中的具體任務(wù)分配到具體的線程中和CPU中(如果是多核處理器)饺饭,具體創(chuàng)建多少個(gè)線程渤早,分配到哪個(gè)線程都是由系統(tǒng)管理

更多內(nèi)容持續(xù)更新

?? 喜歡就點(diǎn)個(gè)贊吧????

?? 覺(jué)得有收獲的瘫俊,可以來(lái)一波鹊杖,收藏+關(guān)注,評(píng)論 + 轉(zhuǎn)發(fā)扛芽,以免你下次找不到我????

??歡迎大家留言交流骂蓖,批評(píng)指正,互相學(xué)習(xí)??川尖,提升自我??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末登下,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子空厌,更是在濱河造成了極大的恐慌,老刑警劉巖银酬,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘲更,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡揩瞪,警方通過(guò)查閱死者的電腦和手機(jī)赋朦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)李破,“玉大人宠哄,你說(shuō)我怎么就攤上這事∴凸ィ” “怎么了毛嫉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)妇菱。 經(jīng)常有香客問(wèn)我承粤,道長(zhǎng)暴区,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任辛臊,我火速辦了婚禮仙粱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘彻舰。我一直安慰自己伐割,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布刃唤。 她就那樣靜靜地躺著隔心,像睡著了一般。 火紅的嫁衣襯著肌膚如雪透揣。 梳的紋絲不亂的頭發(fā)上济炎,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音辐真,去河邊找鬼须尚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侍咱,可吹牛的內(nèi)容都是我干的耐床。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼楔脯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼撩轰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起昧廷,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤堪嫂,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后木柬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體皆串,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年眉枕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恶复。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡速挑,死狀恐怖谤牡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姥宝,我是刑警寧澤翅萤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站腊满,受9級(jí)特大地震影響断序,放射性物質(zhì)發(fā)生泄漏流纹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一违诗、第九天 我趴在偏房一處隱蔽的房頂上張望漱凝。 院中可真熱鬧,春花似錦诸迟、人聲如沸茸炒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)壁公。三九已至,卻和暖如春绅项,著一層夾襖步出監(jiān)牢的瞬間紊册,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工快耿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留囊陡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓掀亥,卻偏偏與公主長(zhǎng)得像撞反,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搪花,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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