GCD深入理解(一)

先要知道GCD字面意思是什么少辣,GCD是Grand Central Dispatch的簡(jiǎn)稱(大型中央處理器).

什么是GCD

GCD是放在libdispatch類庫中的雅任,為并發(fā)代碼在多核硬件上執(zhí)行提供支持欣孤。

GCD術(shù)語

串行和并發(fā) ?(Serial vs Concurrent)

任務(wù)串行就是每次只有一個(gè)任務(wù)執(zhí)行,任務(wù)并發(fā)就是在同一時(shí)間可以有多個(gè)任務(wù)被執(zhí)行。

同步和異步 (Synchronous vs Asynchronous)

同步函數(shù)只在完成了它的預(yù)定任務(wù)后才返回。異步函數(shù)會(huì)立即返回量没,預(yù)定的任務(wù)會(huì)完成但不會(huì)等它完成再返回,所以異步函數(shù)不會(huì)阻塞當(dāng)前線程去執(zhí)行下一個(gè)函數(shù)突想。

臨界區(qū) (Critical Section)

兩個(gè)線程不能同時(shí)執(zhí)行同一段代碼殴蹄。兩個(gè)線程同時(shí)改變共享資源時(shí),會(huì)導(dǎo)致變量變質(zhì)猾担。

競(jìng)態(tài)條件 (Race Condition)

基于特定序列或時(shí)機(jī)的事件的系統(tǒng)以不受控制的方式運(yùn)行袭灯。

死鎖 (Deadlock)

兩個(gè)線程都卡住了,互相等待對(duì)方完成或執(zhí)行其他操作垒探。

線程安全 (Thread Safe)

線程安全是指代碼能夠被線程安全的調(diào)用妓蛮,而不會(huì)有任何問題。比如 NSDictionary ?可以在多個(gè)線程中使用它圾叼,而NSMutableDictionary 多個(gè)線程使用時(shí)要保證它的安全蛤克,否則會(huì)導(dǎo)致它不可信。

并發(fā)與并行(Concurrency vs Parallelism)

并發(fā)代碼以并行的方式執(zhí)行夷蚊,這取決于系統(tǒng)构挤。多核系統(tǒng)可以通過并行來同時(shí)執(zhí)行多個(gè)線程。單核設(shè)備必須先運(yùn)行一個(gè)線程惕鼓,執(zhí)行一個(gè)上下文切換筋现,然后運(yùn)行另一個(gè)線程,因?yàn)樘焖钥傆X得是并發(fā)執(zhí)行箱歧。并行要求并發(fā)矾飞,并發(fā)卻不能保證并行。

Queues 隊(duì)列

首先接下什么是FIFO(First Input First Output的縮寫呀邢,先入先出隊(duì)列洒沦,這是一種傳統(tǒng)的按序執(zhí)行方法,先進(jìn)入的指令先完成并引退价淌,跟著才執(zhí)行第二條指令申眼。)

GCD提供 dispatch queues來處理代碼塊瞒津。這些隊(duì)列管理任務(wù)用FIFO的順序執(zhí)行,保證第一個(gè)添加的第一個(gè)執(zhí)行括尸,直到終點(diǎn)巷蚪。

所有的dispatch queues 自身都是線程安全的。

兩種調(diào)度隊(duì)列(串行隊(duì)列和并發(fā)隊(duì)列)

串行隊(duì)列 (Serial Queues)

任務(wù)一次執(zhí)行一個(gè)濒翻,只有前一個(gè)任務(wù)執(zhí)行完才開始下一個(gè)屁柏。因?yàn)橥瑫r(shí)只執(zhí)行一個(gè)任務(wù)的原因,從競(jìng)態(tài)條件下保護(hù)了臨界區(qū)肴焊。所以保護(hù)臨界區(qū)的唯一方式就是通過提交到調(diào)度隊(duì)列的任務(wù)前联,就不用擔(dān)心臨界區(qū)的安全問題了功戚。

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

并發(fā)隊(duì)列只能保證會(huì)按照添加的順序開始執(zhí)行娶眷,任務(wù)以任意順序完成,你不知道何時(shí)開始下一個(gè)任務(wù)啸臀,完全取決于GCD届宠。GCD來決定在多核和單核上處理任務(wù),來完成任務(wù)乘粒。

隊(duì)列類型 (Queues Types)

主隊(duì)列 (main queue) 豌注, 系統(tǒng)提供,串行隊(duì)列灯萍,它能保證所有任務(wù)都在主線程執(zhí)行轧铁,而主線程是唯一可用于更新UI的線程。這個(gè)隊(duì)列通常用來發(fā)消息給UIView或發(fā)送通知旦棉。

全局調(diào)度隊(duì)列( Global Dispatch Queues)齿风,系統(tǒng)同時(shí)提供給你好幾個(gè)并發(fā)隊(duì)列,目前四個(gè)全局隊(duì)列有不同的優(yōu)先級(jí):background绑洛,low救斑,default,high真屯。

自己可以創(chuàng)建串行隊(duì)列或并發(fā)隊(duì)列脸候。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市绑蔫,隨后出現(xiàn)的幾起案子运沦,更是在濱河造成了極大的恐慌,老刑警劉巖配深,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件携添,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凉馆,警方通過查閱死者的電腦和手機(jī)薪寓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門亡资,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人向叉,你說我怎么就攤上這事锥腻。” “怎么了母谎?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵瘦黑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我奇唤,道長(zhǎng)幸斥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任咬扇,我火速辦了婚禮甲葬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘懈贺。我一直安慰自己经窖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布梭灿。 她就那樣靜靜地躺著画侣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪堡妒。 梳的紋絲不亂的頭發(fā)上配乱,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音皮迟,去河邊找鬼搬泥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛万栅,可吹牛的內(nèi)容都是我干的佑钾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼烦粒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼休溶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扰她,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤兽掰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后徒役,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孽尽,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年忧勿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杉女。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞻讽。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖熏挎,靈堂內(nèi)的尸體忽然破棺而出速勇,到底是詐尸還是另有隱情,我是刑警寧澤坎拐,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布烦磁,位于F島的核電站,受9級(jí)特大地震影響哼勇,放射性物質(zhì)發(fā)生泄漏都伪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一积担、第九天 我趴在偏房一處隱蔽的房頂上張望陨晶。 院中可真熱鬧,春花似錦磅轻、人聲如沸珍逸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叭爱,卻和暖如春撮躁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背买雾。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工把曼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漓穿。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓嗤军,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親晃危。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叙赚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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