淺談GCD一

     多線程知識在iOS開發(fā)開發(fā)中是非常重要的一塊內(nèi)容梭灿,同時也是大多數(shù)程序員出去面試最愛問的知識點之一阴汇,當然也是我們進階路上必須翻過的一道坎,多線程內(nèi)容主要涉及兩大塊核心點尼桶,一是線程二是對列操灿。 

1 線程
進程和線程都是操作系統(tǒng)的概念,進程是應用程序的執(zhí)行實例泵督,每個進程都有私有的虛擬地址空間趾盐,代碼,數(shù)據(jù)和其他系統(tǒng)資源小腊。
線程是進程的一個內(nèi)部執(zhí)行單元救鲤,系統(tǒng)創(chuàng)建好后實際上就啟動了一個該進程的主執(zhí)行線程,所以當我們打開app時秩冈,其實也就啟動了一個主線程本缠,這個主線程不需要我們手動去創(chuàng)建,二是系統(tǒng)已經(jīng)為我們創(chuàng)建好的入问。除了主線程以外我們還可以根據(jù)自己需要創(chuàng)建其他線程丹锹,線程本身占用資源或很少的資源,但是線程需要CPU分配時間芬失,如果某項任務長時間占用CPU時間楣黍,會擠壓其他線程的CPU時間,導致線程等待棱烂。這就是同步線程必須上一個任務執(zhí)行完才會執(zhí)行下一個任務租漂。
異步線程則不會阻塞線程執(zhí)行,給人的感覺是多個任務同步執(zhí)行垢啼,實際上并非如此窜锯,后面會講到张肾。
2對列
對列是一種數(shù)據(jù)結構芭析,它具有先進先出的特點,是只允許在一端進行插入操作吞瞪,而在另一端進行刪除操作的線性表馁启。在iOS開發(fā)中對列其實就是一個任務的集合,主要有串行對列和并行對列兩種,最先添加到對列中的任務最先被執(zhí)行惯疙。
有了以上的基礎知識鋪墊翠勉,我們開始談談GCD
蘋果官方給出的解釋:GCD是異步執(zhí)行任務的技術之一。一般將應用程序中記述的線程管理代碼在系統(tǒng)集中實現(xiàn)霉颠,開發(fā)者只需要定義想執(zhí)行的任務并追加到適當?shù)腄ispatch Queue中对碌,GCD就可以生成必要的線程并計劃執(zhí)行任務。這里不需要我們手動管理線程生命周期蒿偎,只需要把人物添加到對列中即可朽们。
1串行對列
串行對列中,任務會一個一個按照先進先出的順序诉位,執(zhí)行必須上一個任務執(zhí)行完畢再執(zhí)行下一個任務骑脱。在同步對列中將任務放到異步線程中,會創(chuàng)建新的線程苍糠,但是任務的執(zhí)行順序依然是按照任務添加的順序執(zhí)行叁丧。
2并行對列
并發(fā)對列可以讓多個任務同時執(zhí)行(可以開啟多個線程),但是只有在異步線程中才有效岳瞭,如果你在并發(fā)對列中添加的是同步任務拥娄,任務執(zhí)行順序依然是按照串行的執(zhí)行順序,切不會創(chuàng)建新的線程寝优。
并發(fā)對列中任務看起來是同時進行条舔,實際上是CPU在進程任務執(zhí)行的時候在多個線程快速切換,給人的感覺好像是任務被同步執(zhí)行乏矾,不過這種線程之間的切換會消耗資源孟抗,雖然異步線程會創(chuàng)建新的線程,但不會無限創(chuàng)建下去钻心,CPU會根據(jù)資源調(diào)度合理創(chuàng)建線程數(shù)量凄硼。
同步和異步
同步不會創(chuàng)建新的線程,任務會按照順序執(zhí)行捷沸,會阻塞當前線程摊沉,異步會創(chuàng)建新的線程,任務會在新線程執(zhí)行痒给,不會阻塞當前線程说墨。
線程死鎖
串行對列的問題,比如異步線程里嵌套同步線程 苍柏。只有第一個任務走完才會走第二個任務尼斧,異步線程,開啟了一個子線程试吁,子線程里里面嵌套了一個同步線程棺棵,會阻礙當前線程的異步線程,但是由于是串行隊列必須第一個任務走完才會走第二個,于是乎同步線程會等待異步線程執(zhí)行完才會去執(zhí)行烛恤,但是此時異步線程被阻塞無法繼續(xù)走下去母怜,必須等待,這就形成了相互等待的死鎖狀態(tài)缚柏。
在下一次的文章里我會把代碼加上苹熏,這篇文章只是希望大家能夠?qū)Χ嗑€程有個大概的認識。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末币喧,一起剝皮案震驚了整個濱河市柜裸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粱锐,老刑警劉巖疙挺,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怜浅,居然都是意外死亡铐然,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門恶座,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搀暑,“玉大人,你說我怎么就攤上這事跨琳∽缘悖” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵脉让,是天一觀的道長桂敛。 經(jīng)常有香客問我,道長溅潜,這世上最難降的妖魔是什么术唬? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮滚澜,結果婚禮上粗仓,老公的妹妹穿的比我還像新娘。我一直安慰自己设捐,他們只是感情好借浊,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萝招,像睡著了一般蚂斤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上即寒,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天橡淆,我揣著相機與錄音,去河邊找鬼母赵。 笑死逸爵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的凹嘲。 我是一名探鬼主播师倔,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼周蹭!你這毒婦竟也來了趋艘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凶朗,失蹤者是張志新(化名)和其女友劉穎瓷胧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棚愤,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡搓萧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宛畦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘸洛。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖次和,靈堂內(nèi)的尸體忽然破棺而出反肋,到底是詐尸還是另有隱情,我是刑警寧澤踏施,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布石蔗,位于F島的核電站,受9級特大地震影響畅形,放射性物質(zhì)發(fā)生泄漏抓督。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一束亏、第九天 我趴在偏房一處隱蔽的房頂上張望铃在。 院中可真熱鬧,春花似錦碍遍、人聲如沸定铜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揣炕。三九已至,卻和暖如春东跪,著一層夾襖步出監(jiān)牢的瞬間畸陡,已是汗流浹背鹰溜。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丁恭,地道東北人曹动。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像牲览,于是被迫代替她去往敵國和親墓陈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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