iOS - 多線程

進(jìn)程和線程

  1. 什么是進(jìn)程

    進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序每個(gè)進(jìn)程之間是獨(dú)立的,每個(gè)進(jìn)程均運(yùn)行在其專用且受保護(hù)的內(nèi)存空間內(nèi)

  2. 什么是線程

    1個(gè)進(jìn)程要想執(zhí)行任務(wù)末贾,必須得有線程(每1個(gè)進(jìn)程至少要有1條線程)
    線程是進(jìn)程的基本執(zhí)行單元,一個(gè)進(jìn)程(程序)的所有任務(wù)都在線程中執(zhí)行
    比如使用酷狗播放音樂、使用迅雷下載電影史飞,都需要在線程中執(zhí)行

多線程

1.什么是多線程
1個(gè)進(jìn)程中可以開啟多條線程喧务,每條線程可以并行(同時(shí))執(zhí)行不同的任務(wù)
進(jìn)程 ->車間,線程->車間工人
多線程技術(shù)可以提高程序的執(zhí)行效率
比如同時(shí)開啟3條線程分別下載3個(gè)文件(分別是文件A缺虐、文件B芜壁、文件C)


![241227387673566.png](http://upload-images.jianshu.io/upload_images/3375752-6dadebbc77060856.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.多線程的原理

同一時(shí)間,CPU只能處理1條線程高氮,只有1條線程在工作(執(zhí)行)
多線程并發(fā)(同時(shí))執(zhí)行慧妄,其實(shí)是CPU快速地在多條線程之間調(diào)度(切換)
如果CPU調(diào)度線程的時(shí)間足夠快,就造成了多線程并發(fā)執(zhí)行的假象
思考:如果線程非常非常多剪芍,會(huì)發(fā)生什么情況塞淹?
CPU會(huì)在N多線程之間調(diào)度,CPU會(huì)累死罪裹,消耗大量的CPU資源
每條線程被調(diào)度執(zhí)行的頻次會(huì)降低(線程的執(zhí)行效率降低)

3.多線程的優(yōu)缺點(diǎn)

多線程的優(yōu)點(diǎn)
能適當(dāng)提高程序的執(zhí)行效率
能適當(dāng)提高資源利用率(CPU饱普、內(nèi)存利用率)

多線程的缺點(diǎn)
開啟線程需要占用一定的內(nèi)存空間(默認(rèn)情況下运挫,主線程占用1M,子線程占用512KB)套耕,如果開啟大量的線程谁帕,會(huì)占用大量的內(nèi)存空間,降低程序的性能
線程越多冯袍,CPU在調(diào)度線程上的開銷就越大
程序設(shè)計(jì)更加復(fù)雜:比如線程之間的通信匈挖、多線程的數(shù)據(jù)共享

任務(wù)與隊(duì)列

  • 任務(wù):指的就是需要執(zhí)行的代碼;GCD中提供block回調(diào)康愤;執(zhí)行的方式有兩種:同步與異步儡循;兩者之間的區(qū)別就是會(huì)不會(huì)創(chuàng)建新的線程。
  • 隊(duì)列:用于存放任務(wù)征冷。一共有兩種隊(duì)列贮折, 串行隊(duì)列 和 并行隊(duì)列。
隊(duì)列是存放任務(wù)的地方资盅,可以理解為存放的是一段一段將要執(zhí)行的代碼调榄。而線程是執(zhí)行任務(wù)的流程,指的是執(zhí)行完 A 接著執(zhí)行 B, 然后再執(zhí)行 C, 這樣 A.B.C.看起來就是一條執(zhí)行路線呵扛,就稱其為線程每庆。

任務(wù)的執(zhí)行過程是這樣的:我們把要執(zhí)行的任務(wù)添加到隊(duì)列,接下來系統(tǒng)會(huì)從隊(duì)列中取出任務(wù)執(zhí)行今穿;系統(tǒng)根據(jù)隊(duì)列的類型(串行隊(duì)列缤灵、并行隊(duì)列)執(zhí)行不同的操作,如果是串行隊(duì)列:系統(tǒng)會(huì)把這個(gè)隊(duì)列中的任務(wù)取出來在某一個(gè)線程中執(zhí)行蓝晒。如果是并行隊(duì)列:系統(tǒng)會(huì)把隊(duì)列中的任務(wù)取出來放到很多個(gè)線程中同時(shí)執(zhí)行腮出。

所以,隊(duì)列是不可能阻塞的芝薇。比如:并行隊(duì)列中有很多任務(wù)胚嘲,其中一個(gè)非常耗時(shí),但是這個(gè)耗時(shí)任務(wù)執(zhí)行的時(shí)候洛二,其他的任務(wù)會(huì)在其他線程無憂無慮的執(zhí)行馋劈,不受影響,說明系統(tǒng)在繼續(xù)把隊(duì)列中的任務(wù)取出來晾嘶,所以隊(duì)列沒有阻塞妓雾。在串行隊(duì)列中,因?yàn)橐粋€(gè)隊(duì)列對(duì)應(yīng)一個(gè)線程垒迂,所以如果線程被耗時(shí)任務(wù)阻塞了械姻,系統(tǒng)這時(shí)也就無法再往這個(gè)線程上放任務(wù),所以容易混淆机断,使你以為是隊(duì)列阻塞了楷拳。其實(shí)材部,隊(duì)列是沒有阻塞的概念,只要有空線程唯竹,系統(tǒng)就可以把任務(wù)放上去乐导。

串行隊(duì)列 中的任務(wù)會(huì)根據(jù)隊(duì)列的定義 FIFO(先進(jìn)先出) 的執(zhí)行,一個(gè)接一個(gè)的先進(jìn)先出的進(jìn)行執(zhí)行浸颓。
并行隊(duì)列 GCD 也會(huì) FIFO的取出來物臂,但不同的是,它取出來一個(gè)就會(huì)放到別的線程产上,然后再取出來一個(gè)又放到另一個(gè)的線程棵磷。這樣由于取的動(dòng)作很快,忽略不計(jì)晋涣,看起來仪媒,所有的任務(wù)都是一起執(zhí)行的。不過需要注意谢鹊,GCD 會(huì)根據(jù)系統(tǒng)資源控制并行的數(shù)量算吩,所以如果任務(wù)很多,它并不會(huì)讓所有任務(wù)同時(shí)執(zhí)行佃扼。

同步執(zhí)行 異步執(zhí)行
串行隊(duì)列 當(dāng)前線程偎巢,一個(gè)一個(gè)執(zhí)行 其他線程,一個(gè)一個(gè)執(zhí)行
并行隊(duì)列 當(dāng)前線程兼耀,一個(gè)一個(gè)執(zhí)行 開很多線程压昼,一起執(zhí)行
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瘤运,隨后出現(xiàn)的幾起案子窍霞,更是在濱河造成了極大的恐慌,老刑警劉巖拯坟,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件但金,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡似谁,警方通過查閱死者的電腦和手機(jī)傲绣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門掠哥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巩踏,“玉大人,你說我怎么就攤上這事续搀∪恚” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵禁舷,是天一觀的道長(zhǎng)彪杉。 經(jīng)常有香客問我毅往,道長(zhǎng),這世上最難降的妖魔是什么派近? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任攀唯,我火速辦了婚禮,結(jié)果婚禮上渴丸,老公的妹妹穿的比我還像新娘侯嘀。我一直安慰自己,他們只是感情好谱轨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布戒幔。 她就那樣靜靜地躺著,像睡著了一般土童。 火紅的嫁衣襯著肌膚如雪诗茎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天献汗,我揣著相機(jī)與錄音敢订,去河邊找鬼。 笑死罢吃,一個(gè)胖子當(dāng)著我的面吹牛枢析,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刃麸,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼醒叁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了泊业?” 一聲冷哼從身側(cè)響起把沼,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吁伺,沒想到半個(gè)月后饮睬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡篮奄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年捆愁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窟却。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昼丑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夸赫,到底是詐尸還是另有隱情菩帝,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站呼奢,受9級(jí)特大地震影響宜雀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜握础,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一辐董、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧禀综,春花似錦郎哭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至依鸥,卻和暖如春亥至,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贱迟。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工姐扮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衣吠。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓茶敏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親缚俏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惊搏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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

  • 又來到了一個(gè)老生常談的問題,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢忧换? 今天就這個(gè)問題開始恬惯,來談?wù)劜?..
    tangsl閱讀 4,127評(píng)論 0 23
  • 多線程 在iOS開發(fā)中為提高程序的運(yùn)行效率會(huì)將比較耗時(shí)的操作放在子線程中執(zhí)行,iOS系統(tǒng)進(jìn)程默認(rèn)啟動(dòng)一個(gè)主線程亚茬,用...
    郭豪豪閱讀 2,597評(píng)論 0 4
  • 什么是進(jìn)程酪耳? 進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序。 每個(gè)進(jìn)程之間是獨(dú)立的刹缝,每個(gè)進(jìn)程均運(yùn)行在其專用且受保護(hù)的內(nèi)存...
    珍此良辰閱讀 1,255評(píng)論 1 5
  • .一.進(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,486評(píng)論 1 33
  • 坐在公交車上,昏昏欲睡梢夯,思緒漸漸飄遠(yuǎn)言疗,霍然轉(zhuǎn)到了高中的校園,分不清是先看到了景還是先想起了人和事··· ...
    一夢(mèng)幻拾年閱讀 508評(píng)論 0 0