05多線程文檔(串并同異)

1.基本概念
進(jìn)程:操作系統(tǒng)上每一個(gè)可以執(zhí)行的程序舷手。
線程:進(jìn)程中的任務(wù),必須在線程中執(zhí)行寺旺。
每一個(gè)進(jìn)程,至少包含一個(gè)線程雨效,就是我們常說的主線程迅涮。

2.任務(wù)在線程中的執(zhí)行
任務(wù)在線程中一次一個(gè)的依次執(zhí)行。一個(gè)線程同時(shí)只能執(zhí)行一個(gè)任務(wù)徽龟。
如果我們需要同時(shí)執(zhí)行多個(gè)任務(wù)叮姑,就需要多個(gè)線程,每次執(zhí)行一個(gè)任務(wù)据悔。
為了提高用戶體驗(yàn)传透,我們就需要使用多線程,比如:網(wǎng)絡(luò)請(qǐng)求极颓,下載圖片朱盐。

3.線程操作的三種方式NSThread、GCD菠隆、NSOperation
(1)NSThread兵琳,輕量級(jí)的線程操作狂秘,需要我們自己創(chuàng)建線程,調(diào)度任務(wù)躯肌,銷毀線程
① 后臺(tái)線程:performSelectorInBackground
② 主線程;performSelectorOnMainThread
③ 以上兩個(gè)線程,只要繼承自NSObject的對(duì)象,都可以調(diào)用
④ 手動(dòng)開辟一個(gè)分線程:

 NSThread * thread = [[NSThread alloc] initWithTarget:(id) selector:(SEL) object:(id)];
 [thread start];

⑤ 自動(dòng)開辟分線程:[NSThread detachNewThreadSelector:(SEL) toTarget:(id) withObject:(id)]
⑥ 判斷線程是否為主線程:[NSThread isMainThread]
⑦ 線程休眠:[NSThread sleepForTimeInterval:2]
⑧ 查看當(dāng)前線程:[NSThread currentThread]

(2)GCD為Grand Central Dispatch的縮寫 宏大的的中央調(diào)度 基于C語言
<1>GCD存在于libdispatch.dylib這個(gè)庫中者春,這個(gè)調(diào)度庫包含了GCD的所有的東西,但任何IOS程序清女,默認(rèn)就加載了這個(gè)庫钱烟,在程序運(yùn)行的過程中會(huì)動(dòng)態(tài)的加載這個(gè)庫,不需要我們手動(dòng)導(dǎo)入嫡丙。
<2>GCD中的函數(shù)大多數(shù)都以dispatch開頭拴袭。

GCD的優(yōu)勢(shì):
1.他是蘋果公司為多核的并行運(yùn)算提出的解決方案,它會(huì)自動(dòng)利用更多的處理器核心;

  1. GCD會(huì)負(fù)責(zé)創(chuàng)建線程調(diào)度你的任務(wù);你只需創(chuàng)建任務(wù), 并添加到適當(dāng)?shù)年?duì)列中( 無需關(guān)心何時(shí)開起曙博、關(guān)閉線程)

dispatch queue (調(diào)度隊(duì)列)
核心理念: 將長(zhǎng)期運(yùn)行的任務(wù)拆分成多個(gè)工作單元, 并把它們添加調(diào)度隊(duì)列拥刻。(即將任務(wù)添加到隊(duì)列當(dāng)中)

串行和并行隊(duì)列
串行隊(duì)列,添加到隊(duì)列中的任務(wù)按添加順序依次執(zhí)行父泳。FIFO泰佳,先進(jìn)先出。
并行隊(duì)列尘吗,多個(gè)任務(wù)同時(shí)執(zhí)行,需要多條分線程浇坐。

同步與異步
同步:依次執(zhí)行任務(wù)(上個(gè)任務(wù)執(zhí)行完畢睬捶,下個(gè)任務(wù)才能執(zhí)行)。
異步:不管前一個(gè)任務(wù)是否執(zhí)行完畢,后一個(gè)任務(wù)都直接執(zhí)行

總結(jié):
同步(串行/并行):(依次執(zhí)行)只有一個(gè)主線程近刘,沒有子線程擒贸。
異步:(并發(fā)執(zhí)行)
串行:1個(gè)子線程
并行:多個(gè)子線程

任務(wù):
線程:

1.同步異步:是否創(chuàng)建子線程。同步不創(chuàng)建觉渴,異步創(chuàng)建介劫。?案淋?座韵??
2.串行并行:決定在線程中一次執(zhí)行一個(gè)任務(wù)還是并發(fā)執(zhí)行多個(gè)任務(wù).踢京?誉碴??瓣距?
3.并行隊(duì)列只有在異步函數(shù)下才有效

GCD 使用隊(duì)列(queue)管理線程黔帕,隊(duì)列分為三種
1.自定義的串行和并行隊(duì)列。
2.運(yùn)行在分線程的4個(gè)優(yōu)先級(jí)不同全局并行隊(duì)列蹈丸,globalQueue成黄。
3.運(yùn)行在主線程的串行隊(duì)列呐芥,mianQueue。(在主線程中,主隊(duì)列中使用同步任務(wù)會(huì)造成死鎖)

在一組并行任務(wù)執(zhí)行完畢后做某個(gè)操作,使用dispatch_group


多個(gè)線程對(duì)同一個(gè)變量的修改需要加鎖奋岁。保證一個(gè)變量同時(shí)只能被一個(gè)線程修改思瘟,當(dāng)這個(gè)線程修改完畢后,其他線程才能修改厦取〕碧可以使用:NSLock,@synchronized虾攻。

單例模式:是一個(gè)類在系統(tǒng)中只有一個(gè)實(shí)例對(duì)象,通過全局的一個(gè)入口點(diǎn)對(duì)這個(gè)實(shí)例對(duì)象進(jìn)行訪問.
iOS中單例模式的實(shí)現(xiàn)方法有兩種:非ARC和ARC + GCD;

(3)NSOperation 純OC代碼 操作隊(duì)列,對(duì)GCD的封裝.它是一個(gè)抽象類铡买,只能使用其子類對(duì)象。系統(tǒng)提供了兩個(gè)子類對(duì)象霎箍,分別是 NSInvocationOperation 和 NSBlockOperation奇钞。通常我們自定義 NSOperation 的子類,重寫子類的 main 方法漂坏,把需要在分線程執(zhí)行的任務(wù)放在 main 方法里景埃。然后把 NSOperation 對(duì)象添加到 NSOperationQueue 中,就會(huì)自動(dòng)在分線程執(zhí)行 main 方法顶别。

4.GCD 和 NSOperation 進(jìn)行比較谷徙。
(1).NSOperation 是對(duì) GCD 的封裝,面相對(duì)象的類驯绎,GCD只是一組方法API完慧。
(2).NSOperation 可以實(shí)現(xiàn)一些 GCD 中無法實(shí)現(xiàn)或者比較復(fù)雜的功能。比如:設(shè)置最大并發(fā)數(shù)剩失,設(shè)置線程間的依賴關(guān)系屈尼。
(3).實(shí)現(xiàn)某個(gè)多線程功能,使用 GCD拴孤,簡(jiǎn)單易用脾歧。實(shí)現(xiàn)某個(gè)多線程模塊,使用 NSOperation演熟,方便類的管理鞭执。

5.nonatomic,atomic
nonatomic芒粹,非原子性蚕冬,多線程訪問修改不加鎖。
atomic是辕,原子性囤热,多線程訪問加鎖。
iOS 推薦我們使用 nonatomic获三,移動(dòng)端的開發(fā)沒有復(fù)雜的多線程場(chǎng)景旁蔼,不加鎖解鎖可以提高效率锨苏。

系統(tǒng)的可變對(duì)象,NSMutableArray棺聊,NSMutabelString 都是線程不安全的伞租,多線程修改,需要加鎖限佩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末葵诈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子祟同,更是在濱河造成了極大的恐慌作喘,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晕城,死亡現(xiàn)場(chǎng)離奇詭異泞坦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)砖顷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門贰锁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滤蝠,你說我怎么就攤上這事豌熄。” “怎么了物咳?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵房轿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我所森,道長(zhǎng),這世上最難降的妖魔是什么夯接? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任焕济,我火速辦了婚禮,結(jié)果婚禮上盔几,老公的妹妹穿的比我還像新娘晴弃。我一直安慰自己,他們只是感情好逊拍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布上鞠。 她就那樣靜靜地躺著,像睡著了一般芯丧。 火紅的嫁衣襯著肌膚如雪芍阎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天缨恒,我揣著相機(jī)與錄音谴咸,去河邊找鬼轮听。 笑死,一個(gè)胖子當(dāng)著我的面吹牛岭佳,可吹牛的內(nèi)容都是我干的血巍。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼珊随,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼述寡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叶洞,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤鲫凶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后京办,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掀序,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年惭婿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了不恭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡财饥,死狀恐怖换吧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钥星,我是刑警寧澤沾瓦,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站谦炒,受9級(jí)特大地震影響贯莺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宁改,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一缕探、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧还蹲,春花似錦爹耗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至斗遏,卻和暖如春山卦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诵次。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工怒坯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炫狱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓剔猿,卻偏偏與公主長(zhǎng)得像视译,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子归敬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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

  • 從哪說起呢酷含? 單純講多線程編程真的不知道從哪下嘴。汪茧。 不如我直接引用一個(gè)最簡(jiǎn)單的問題椅亚,以這個(gè)作為切入點(diǎn)好了 在ma...
    Mr_Baymax閱讀 2,739評(píng)論 1 17
  • Object C中創(chuàng)建線程的方法是什么?如果在主線程中執(zhí)行代碼舱污,方法是什么呀舔?如果想延時(shí)執(zhí)行代碼、方法又是什么扩灯? 1...
    AlanGe閱讀 1,721評(píng)論 0 17
  • 原文:http://www.cocoachina.com/ios/20170707/19769.html 本文主要...
    冬的天閱讀 2,247評(píng)論 0 12
  • 目錄 一顾患、基本概念1.多線程2.串行和并行番捂, 并發(fā)3.隊(duì)列與任務(wù)4.同步與異步5.線程狀態(tài)6.多線程方案 二、GC...
    BohrIsLay閱讀 1,567評(píng)論 5 12
  • 2015-06-26江解,深圳南頭 一 開完周五的例會(huì)已經(jīng)九點(diǎn)過后设预,坐201路公交回來,在“江味一派”點(diǎn)一盤鴨肉叉燒拼...
    善意的閑人閱讀 280評(píng)論 0 1