小驢拉磨之iOS進(jìn)階-多線程(1)

11111.jpg

基本概念

做一個(gè)表格方便理解相關(guān)的包含關(guān)系

進(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) 1個(gè)進(jìn)程要想執(zhí)行任務(wù)抖苦,必須得有線程(每1個(gè)進(jìn)程至少要有1條線程),1個(gè)進(jìn)程(程序)的所有任務(wù)都在線程中執(zhí)行 1個(gè)進(jìn)程中可以開啟多條線程毯侦,每條線程可以并行(同時(shí))執(zhí)行不同的任務(wù)洒缀。
我們同時(shí)打開迅雷瑰谜、QQ欺冀、系統(tǒng)就會(huì)分別啟動(dòng)2個(gè)進(jìn)程 酷狗播放音樂、使用迅雷下載電影萨脑,都需要在線程中執(zhí)行 進(jìn)程—>車間隐轩,線程—>車間工人
WX20171116-101717.png
WX20171116-101906.png

線程的串行(C語言環(huán)境下)

1個(gè)線程中的任務(wù)的執(zhí)行是串行的。如果要在一個(gè)線程中執(zhí)行多個(gè)任務(wù)渤早,那么只能一個(gè)一個(gè)地按順序執(zhí)行這些任務(wù)职车。也就是說,在同一時(shí)間內(nèi)鹊杖,1個(gè)線程只能執(zhí)行1個(gè)任務(wù)悴灵,具體串行并行同步異步會(huì)在之后的文章中解釋。骂蓖。积瞒。

比如在1個(gè)線程中下載3個(gè)文件(文件A、文件B登下、文件C)如果是串行執(zhí)行茫孔,因此,可以認(rèn)為線程是進(jìn)程中的 1條執(zhí)行路徑

多線程

多線程的原理

  1. 同一時(shí)間被芳,CPU只能處理1條線程缰贝,只有1條線程在工作(執(zhí)行)
  2. 多線程并發(fā)(同時(shí))執(zhí)行,其實(shí)是CPU快速地在多條線程之間調(diào)度(切換)
  3. 如果CPU調(diào)度線程的時(shí)間足夠快畔濒,就造成了多線程并發(fā)執(zhí)行的假象

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

多線程優(yōu)點(diǎn)
  1. 能適當(dāng)提高程序的執(zhí)行效率
  2. 能適當(dāng)提高資源利用率(CPU剩晴、內(nèi)存利用率),充分發(fā)揮多核處理器優(yōu)勢侵状,將不同線程任務(wù)分配給不同的處理器赞弥,真正進(jìn)入“并行運(yùn)算”狀態(tài)
  3. 將耗時(shí)、輪詢或者并發(fā)需求高等任務(wù)分配到其他線程執(zhí)行壹将,并由主線程負(fù)責(zé)統(tǒng)一更新界面會(huì)使得應(yīng)用程序更加流暢嗤攻,用戶體驗(yàn)更好
多線程缺點(diǎn)
  1. 創(chuàng)建線程是有開銷的毛嫉,iOS下主要成本包括:內(nèi)核數(shù)據(jù)結(jié)構(gòu)(大約1KB)诽俯、棧空間(子線程512KB承粤、主線程1M暴区、也可以使用-setStackSize:設(shè)置,但必須是4K的倍數(shù)辛臊,而且最小是16K),創(chuàng)建線程大約需要90ms的創(chuàng)建時(shí)間
  2. 如果開啟大量的線程仙粱,會(huì)降低程序的性能
  3. 線程越多,CPU在調(diào)度線程上的開銷就越大
  4. 程序設(shè)計(jì)更加復(fù)雜:比如線程之間的通信彻舰、多線程的數(shù)據(jù)共享
多線程使用注意
  1. 共享資源的“爭奪”
  2. 多線程是為了同步完成多項(xiàng)任務(wù)伐割,不是為了提高運(yùn)行效率候味,而是為了通過提高資源使用效率來提高系統(tǒng)的整體性能
  3. 線程使用不是無節(jié)制的
  4. iOS中的主線程的堆棧大小是1M
  5. 從第二個(gè)線程開始都是512KB
  6. 這些數(shù)值不能通過編譯器開關(guān)或線程API函數(shù)更改
  7. 只有主線程有直接修改UI的能力
iOS程序亂使用多線程出現(xiàn)的狀況

在iOS手機(jī)端表現(xiàn):手機(jī)發(fā)燙、電池消耗迅速

多線程在iOS開發(fā)中的應(yīng)用

做一個(gè)表格方便理解隔心,一目了然

主線程 子線程
概念 1個(gè)iOS程序運(yùn)行后白群,默認(rèn)會(huì)開啟一條線程,稱為“主線程”或“UI線程” 由我們手動(dòng)創(chuàng)建或者開啟的線程
作用 顯示硬霍、刷新UI界面帜慢,處理UI事件(比如點(diǎn)擊事件、滾動(dòng)事件唯卖、拖拽事件等) 處理耗時(shí)粱玲、輪詢或者并發(fā)需求高等的任務(wù)
使用注意 1、別將比較耗時(shí)的操作放在主線程中拜轨。2抽减、耗時(shí)操作會(huì)卡住主線程,嚴(yán)重影響UI的流暢度撩轰,給用戶一種'卡'的壞體驗(yàn) 盡可能不要刷新UI胯甩,可能會(huì)崩潰

線程的創(chuàng)建

技術(shù)方案 簡介 語言 線程生命周期 使用頻率
pthread 1. 一套通用的多線程API 2. 適用于Unix\linux\Windows等系統(tǒng)。3. 跨平臺(tái)\可移植堪嫂。4. 適用難度大 C 程序員管理 幾乎不用
NSThread 1. 適用更加面相對(duì)象偎箫。2. 簡單易用,可直接操作線程對(duì)象皆串。 OC 程序員管理 偶爾使用
GCD 1. 旨在替代NSThread等線程技術(shù)淹办。2. 充分利用設(shè)備的多核。 C 自動(dòng)管理 經(jīng)常使用
NSOperation 1. 基于GCD(底層是GCD)恶复。2. 比GCD多了一些更簡單使用的功能怜森。2. 使用更加面向?qū)ο蟆?/td> OC 自動(dòng)管理 經(jīng)常使用

蘋果推薦是用GCD 和 NSOperation

注意:

[NSThread currentThread]跟蹤任務(wù)所在線程,適用于NSThread谤牡、NSOperation副硅、GCD
使用NSThread的線程,不會(huì)自動(dòng)添加autoreleasepool
線程中的自動(dòng)釋放池:
@autoreleasepool{}自動(dòng)釋放池翅萤。主線程中是有自動(dòng)釋放池恐疲,使用NSThread 和 NSObject 不會(huì)有。如果在后臺(tái)線程中創(chuàng)建了autoreleasepool的對(duì)象套么,需要使用自動(dòng)釋放池培己,否則會(huì)出現(xiàn)內(nèi)存泄漏。當(dāng)自動(dòng)釋放池銷毀時(shí)胚泌,對(duì)池中的所有對(duì)象發(fā)送release消息省咨,清空自動(dòng)釋放池。當(dāng)所有的autorelease對(duì)象玷室,在出了作用域后零蓉,會(huì)自動(dòng)添加到最近一次創(chuàng)建的自動(dòng)釋放池中笤受。

后續(xù)詳細(xì)介紹這四種方式

后續(xù)持續(xù)更新~~~~

最后感謝CC老師提供的資料:http://www.reibang.com/p/53df4826029e

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市敌蜂,隨后出現(xiàn)的幾起案子感论,更是在濱河造成了極大的恐慌,老刑警劉巖紊册,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件比肄,死亡現(xiàn)場離奇詭異,居然都是意外死亡囊陡,警方通過查閱死者的電腦和手機(jī)芳绩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撞反,“玉大人妥色,你說我怎么就攤上這事《羝” “怎么了嘹害?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吮便。 經(jīng)常有香客問我笔呀,道長,這世上最難降的妖魔是什么髓需? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任许师,我火速辦了婚禮,結(jié)果婚禮上僚匆,老公的妹妹穿的比我還像新娘微渠。我一直安慰自己,他們只是感情好咧擂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布逞盆。 她就那樣靜靜地躺著,像睡著了一般松申。 火紅的嫁衣襯著肌膚如雪云芦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天攻臀,我揣著相機(jī)與錄音焕数,去河邊找鬼纱昧。 笑死刨啸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的识脆。 我是一名探鬼主播设联,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼善已,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了离例?” 一聲冷哼從身側(cè)響起换团,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宫蛆,沒想到半個(gè)月后艘包,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耀盗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年想虎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叛拷。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舌厨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忿薇,到底是詐尸還是另有隱情裙椭,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布署浩,位于F島的核電站揉燃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筋栋。R本人自食惡果不足惜你雌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望二汛。 院中可真熱鬧婿崭,春花似錦、人聲如沸肴颊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婿着。三九已至授瘦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竟宋,已是汗流浹背提完。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丘侠,地道東北人徒欣。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像蜗字,于是被迫代替她去往敵國和親打肝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脂新,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

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

  • 多線程 在iOS開發(fā)中為提高程序的運(yùn)行效率會(huì)將比較耗時(shí)的操作放在子線程中執(zhí)行,iOS系統(tǒng)進(jìn)程默認(rèn)啟動(dòng)一個(gè)主線程粗梭,用...
    郭豪豪閱讀 2,590評(píng)論 0 4
  • 本文首發(fā)于我的個(gè)人博客:「程序員充電站」[https://itcharge.cn]文章鏈接:「傳送門」[https...
    ITCharge閱讀 347,494評(píng)論 308 1,926
  • 一争便、前言 上一篇文章iOS多線程淺匯-原理篇中整理了一些有關(guān)多線程的基本概念。本篇博文介紹的是iOS中常用的幾個(gè)多...
    nuclear閱讀 2,046評(píng)論 6 18
  • 離別之后才懂了它——這句話中包含著一份檢討断医。我們一直偎依它滞乙、吮吸它,卻又埋怨它鉴嗤、輕視它酷宵、責(zé)斥它。它花了幾千年的目光...
    寶丁閱讀 688評(píng)論 0 2
  • 因?yàn)榻?jīng)常做展覽類的項(xiàng)目嘛躬窜,所以會(huì)有隱藏鼠標(biāo)的需求浇垦,在unity中比較簡單就可以隱藏,但是如果不是用unity做的話...
    AmazingMei閱讀 1,611評(píng)論 0 0