IOS 多線程

多線程
為什么需要多線程? 將太多耗費(fèi)時(shí)間的操作放在主線程執(zhí)行,會(huì)造成主線程堵塞,帶來(lái)極差的用戶體驗(yàn)啸驯。多線程是防止主線程堵塞,增加運(yùn)行效率的最佳方法
一. GCD
1.簡(jiǎn)介:
(1) GCD基于C語(yǔ)言
(2) GCD會(huì)自動(dòng)管理線程的生命周期(創(chuàng)建線程,調(diào)度任務(wù),銷毀線程)
(3)GCD的一個(gè)重要概念是隊(duì)列: 將長(zhǎng)期運(yùn)行的任務(wù)分拆成多個(gè)工作單元,將這些單元添加到dispath queue中,系統(tǒng)會(huì)為我們管理這些dispath queue

2.GCD的運(yùn)用
(1) 使用dispatch_get_current_queue函數(shù)作為調(diào)試用途,或者測(cè)試當(dāng)前queue的標(biāo)識(shí)
(2) 使用dispatch_get_main_queue函數(shù)獲得應(yīng)用主線程關(guān)聯(lián)的串行dispatch
(3) 使用dispatch_get_global_queue來(lái)獲得共享的并發(fā)queue

3.GCD的優(yōu)點(diǎn)
(1) 易用: GCD比之thread跟簡(jiǎn)單易用,基于block的血統(tǒng)導(dǎo)致它能極為簡(jiǎn)單得在不同代碼作用域之間傳遞上下文饺律。
(2) 效率: GCD被實(shí)現(xiàn)得如此輕量和優(yōu)雅,使得它在很多地方比之專門創(chuàng)建消耗資源的線程更實(shí)用且快速
(3) 性能: GCD自動(dòng)根據(jù)系統(tǒng)負(fù)載來(lái)增減線程數(shù)量跺株,這就減少了上下文切換以及增加了計(jì)算效率复濒。

4.GCD的并行隊(duì)列
1.簡(jiǎn)介: 讓多個(gè)任務(wù)并發(fā)執(zhí)行(并發(fā)功能只在異步函數(shù)下才有效,因?yàn)楫惒胶瘮?shù)才具備開啟新線程的能力)

5.GCD的串行隊(duì)列
1.簡(jiǎn)介: 讓任務(wù)一個(gè)接著一個(gè)地執(zhí)行(一個(gè)任務(wù)執(zhí)行完畢后,再執(zhí)行下一個(gè)任務(wù))(使用sync函數(shù)往當(dāng)前串行隊(duì)列中添加任務(wù),會(huì)卡在當(dāng)前串行隊(duì)列)
2.獲取串行的途徑:
(1) 使用dispatch_queue_create函數(shù) : dispatch_queue_tqueue = dispatch_queue_create(“隊(duì)列名稱”,NULL);
(2) 使用主隊(duì)列(GCD自帶的串行隊(duì)列) : dispatch_queue_tqueue = dispatch_get_main_queue();

6.GCD詳解
(1) dispatch_async(異步任務(wù)) :可以在新的線程中執(zhí)行任務(wù),具備開啟新線程的能力
(2) dispatch_sync(同步任務(wù)): 只能在當(dāng)前任務(wù)中執(zhí)行任務(wù),不具備開啟新線程的能力
(3) dispatch_group_t(隊(duì)列組): 異步執(zhí)行多個(gè)耗時(shí)操作,等多個(gè)耗時(shí)操作執(zhí)行完畢之后,再回到主線程執(zhí)行操作
(4) dispatch_barrier_async(柵欄)
<1>攔截前面的任務(wù),只有先添加到隊(duì)列中的任務(wù)等于”執(zhí)行完畢”,才會(huì)執(zhí)行柵欄添加的任務(wù)
<2>如果柵欄后面還有其他任務(wù),那么必須等柵欄任務(wù)執(zhí)行完畢之后才會(huì)執(zhí)行后面的其他任務(wù)
<3>如果要使用柵欄,那么所有的任務(wù)都必須添加到同一隊(duì)列中
(5) dispatch_after(延時(shí)執(zhí)行)
(6) dispatch_once(執(zhí)行一次)
(7) dispatch_apply(快速迭代遍歷)

二. NSOpration
1.簡(jiǎn)單說(shuō)明: NSOperation 和 NSOperationQueue 實(shí)現(xiàn)多線程編程,自動(dòng)執(zhí)行操作,自動(dòng)開啟線程

2.實(shí)現(xiàn)步驟:
(1)先將需要執(zhí)行的操作封裝到一個(gè)NSOperation對(duì)象中
(2)將NSOperation對(duì)象添加到NSOperationQueue對(duì)象中
(3)系統(tǒng)會(huì)自動(dòng)將NSOperationQueue中的NSOperation取出來(lái)
(4)將取出來(lái)的NSOperation封裝的操作放到一個(gè)新的線程執(zhí)行

3.NSOperation的子類
(1) NSInvocationOperation
(2) NSBlockOperation
(3) 自定義子類繼承NSOperation,實(shí)現(xiàn)內(nèi)部響應(yīng)的方法

4.功能
(1)并發(fā)數(shù): 同時(shí)執(zhí)行的任務(wù)數(shù),可設(shè)置最大并發(fā)數(shù)
(2)隊(duì)列的取消脖卖、暫停和恢復(fù)
(3)設(shè)置NSOperation 在queue中的優(yōu)先級(jí),可以改變操作的執(zhí)行優(yōu)先級(jí)
(4)NSOperation 之間可以設(shè)置依賴來(lái)保證執(zhí)行順序
(5)可以監(jiān)聽一個(gè)操作的執(zhí)行完畢

三.NSThread
1.簡(jiǎn)介: 是三種方法里面相對(duì)輕量級(jí)的,但需要管理線程的生命周期巧颈、同步畦木、加鎖問(wèn)題,這會(huì)導(dǎo)致一定的性能開銷
2.優(yōu)點(diǎn): NSThread比其他兩種多線程方案較輕量級(jí)砸泛,更直觀地控制線程對(duì)象
3.缺點(diǎn): 需要自己管理線程的生命周期十籍,線程同步。線程同步對(duì)數(shù)據(jù)的加鎖會(huì)有一定的系統(tǒng)開銷

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晾嘶,一起剝皮案震驚了整個(gè)濱河市妓雾,隨后出現(xiàn)的幾起案子娶吞,更是在濱河造成了極大的恐慌垒迂,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妒蛇,死亡現(xiàn)場(chǎng)離奇詭異机断,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)绣夺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門吏奸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人陶耍,你說(shuō)我怎么就攤上這事奋蔚。” “怎么了烈钞?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵泊碑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我毯欣,道長(zhǎng)馒过,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任酗钞,我火速辦了婚禮腹忽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砚作。我一直安慰自己窘奏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布葫录。 她就那樣靜靜地躺著着裹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪压昼。 梳的紋絲不亂的頭發(fā)上求冷,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天瘤运,我揣著相機(jī)與錄音,去河邊找鬼匠题。 笑死拯坟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的韭山。 我是一名探鬼主播郁季,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钱磅!你這毒婦竟也來(lái)了梦裂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盖淡,失蹤者是張志新(化名)和其女友劉穎年柠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體褪迟,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冗恨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了味赃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掀抹。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖心俗,靈堂內(nèi)的尸體忽然破棺而出傲武,到底是詐尸還是另有隱情,我是刑警寧澤城榛,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布揪利,位于F島的核電站,受9級(jí)特大地震影響吠谢,放射性物質(zhì)發(fā)生泄漏土童。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一工坊、第九天 我趴在偏房一處隱蔽的房頂上張望献汗。 院中可真熱鬧,春花似錦王污、人聲如沸罢吃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尿招。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間就谜,已是汗流浹背怪蔑。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丧荐,地道東北人缆瓣。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像虹统,于是被迫代替她去往敵國(guó)和親弓坞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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

  • 歡迎大家指出文章中需要改正或者需要補(bǔ)充的地方车荔,我會(huì)及時(shí)更新渡冻,非常感謝。 一. 多線程基礎(chǔ) 1. 進(jìn)程 進(jìn)程是指在系...
    xx_cc閱讀 7,191評(píng)論 11 70
  • .一.進(jìn)程 進(jìn)程:是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序,每個(gè)進(jìn)程之間是獨(dú)立的忧便,每個(gè)進(jìn)程均運(yùn)行在其專用且受保護(hù)的內(nèi)存空...
    IIronMan閱讀 4,490評(píng)論 1 33
  • 本篇博客共分以下幾個(gè)模塊來(lái)介紹GCD的相關(guān)內(nèi)容: 多線程相關(guān)概念 多線程編程技術(shù)的優(yōu)缺點(diǎn)比較族吻? GCD中的三種隊(duì)列...
    有夢(mèng)想的老伯伯閱讀 1,020評(píng)論 0 4
  • 多線程 在iOS開發(fā)中為提高程序的運(yùn)行效率會(huì)將比較耗時(shí)的操作放在子線程中執(zhí)行,iOS系統(tǒng)進(jìn)程默認(rèn)啟動(dòng)一個(gè)主線程茬腿,用...
    郭豪豪閱讀 2,600評(píng)論 0 4
  • 在1.6中為Array新增了幾個(gè)方法map()呼奢,filter(),some()切平,every(),forEach()...
    憶飛閱讀 682評(píng)論 0 1