線程和進(jìn)程的關(guān)系和區(qū)別

1:線程定義

  • 線程是進(jìn)程的基本執(zhí)行單元,一個(gè)進(jìn)程的所有任務(wù)都在線程中執(zhí)行
  • 進(jìn)程要想執(zhí)行任務(wù),必須得有線程,進(jìn)程至少要有一條線程
  • 程序啟動(dòng)會(huì)默認(rèn)開(kāi)啟一條線程浴骂,這條線程被稱(chēng)為主線程或 UI 線程
    2:進(jìn)程定義
  • 進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序
  • 每個(gè)進(jìn)程之間是獨(dú)立的,每個(gè)進(jìn)程均運(yùn)行在其專(zhuān)用的且受保護(hù)的內(nèi)存
    3:進(jìn)程與線程的區(qū)別
  • 地址空間:同一進(jìn)程的線程共享本進(jìn)程的地址空間宪潮,而進(jìn)程之間則是獨(dú)立的地址空間溯警。
  • 資源擁有:同一進(jìn)程內(nèi)的線程共享本進(jìn)程的資源如內(nèi)存趣苏、I/O、cpu等梯轻,但是進(jìn)程之間的資源是獨(dú)立的食磕。
  • 一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其他進(jìn)程產(chǎn)生影響喳挑,但是一個(gè)線程崩潰整個(gè)進(jìn)程都死掉芬为。所以多進(jìn)程要比多線程健壯。
  • 進(jìn)程切換時(shí)蟀悦,消耗的資源大,效率高氧敢。所以涉及到頻繁的切換時(shí)日戈,使用線程要好于進(jìn)程。同樣如果要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作孙乖,只能用線程不能用進(jìn)程
  • 執(zhí)行過(guò)程:每個(gè)獨(dú)立的進(jìn)程有一個(gè)程序運(yùn)行的入口浙炼、順序執(zhí)行序列和程序入口。但是線程不能獨(dú)立執(zhí)行唯袄,必須依存在應(yīng)用程序中弯屈,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。
  • 線程是處理器調(diào)度的基本單位恋拷,但是進(jìn)程不是资厉。
    4:多線程的意義
  • 優(yōu)點(diǎn)
    • 能適當(dāng)提高程序的執(zhí)行效率
    • 能適當(dāng)提高資源的利用率(CPU,內(nèi)存)
    • 線程上的任務(wù)執(zhí)行完成后蔬顾,線程會(huì)自動(dòng)銷(xiāo)毀
  • 缺點(diǎn)
    • 開(kāi)啟線程需要占用一定的內(nèi)存空間(默認(rèn)情況下宴偿,每一個(gè)線程都占 512 KB)
    • 如果開(kāi)啟大量的線程,會(huì)占用大量的內(nèi)存空間诀豁,降低程序的性能
    • 線程越多窄刘,CPU 在調(diào)用線程上的開(kāi)銷(xiāo)就越大
    • 程序設(shè)計(jì)更加復(fù)雜,比如線程間的通信舷胜、多線程的數(shù)據(jù)共享
      5:多線程的原理
  • (單核cpu)同一時(shí)間娩践,cpu只能處理 1 個(gè)線程。換言之烹骨,同一時(shí)間只有 1 個(gè)線程在執(zhí)行
  • 多線程同時(shí)執(zhí)行:
    *是 cpu 快速的在多個(gè)線程之間的切換
    * cpu 調(diào)度線程的時(shí)間足夠快翻伺,就造成了多線程的“同時(shí)”執(zhí)行效果
  • 如果線程數(shù)非常多
    * cpu 會(huì)在 N 個(gè)線程直接切換,消耗大量的 cpu 資源
    * 每個(gè)線程調(diào)度的次數(shù)會(huì)降低展氓,線程的執(zhí)行效率降低
    6:多線程技術(shù)方案


    多線程技術(shù)方案.png

    7:C與OC的橋接

  • __bridge只做類(lèi)型轉(zhuǎn)換穆趴,但是不修改對(duì)象(內(nèi)存)管理權(quán);
  • __bridge_retained(也可以使用CFBridgingRetain)將Objective-C的對(duì)象轉(zhuǎn)換為Core Foundation的對(duì)象遇汞,同時(shí)將對(duì)象(內(nèi)存)的管理權(quán)交給我們未妹,后續(xù)需要使用CFRelease或者相關(guān)方法來(lái)釋放對(duì)象簿废;
    *__bridge_transfer(也可以使用CFBridgingRelease)將Core Foundation的對(duì)象轉(zhuǎn)換為Objective-C的對(duì)象,同時(shí)將對(duì)象(內(nèi)存)的管理權(quán)交給ARC络它。
    8:線程生命周期


    線程生命周期.png
1.png

2.png

效率.png

9:互斥鎖

  • 互斥鎖小結(jié)
    • 保證鎖內(nèi)的代碼族檬,同一時(shí)間,只有一條線程能夠執(zhí)行化戳!
    • 互斥鎖的鎖定范圍单料,應(yīng)該盡量小,鎖定范圍越大点楼,效率越差扫尖!
  • 互斥鎖參數(shù)
    • 能夠加鎖的任意 NSObject 對(duì)象
    • 注意:鎖對(duì)象一定要保證所有的線程都能夠訪問(wèn)
    • 如果代碼中只有一個(gè)地方需要加鎖,大多都使用 self掠廓,這樣可以避免單獨(dú)再創(chuàng)建一個(gè)鎖對(duì)象
      10:atomic與nonatomic 的區(qū)別
  • nonatomic 非原子屬性
  • atomic 原子屬性(線程安全)换怖,針對(duì)多線程設(shè)計(jì)的,默認(rèn)值
    • 保證同一時(shí)間只有一個(gè)線程能夠?qū)懭?但是同一個(gè)時(shí)間多個(gè)線程都可以取值)
    • atomic 本身就有一把鎖(自旋鎖)
    • 單寫(xiě)多讀:?jiǎn)蝹€(gè)線程寫(xiě)入蟀瞧,多個(gè)線程可以讀取
  • atomic:線程安全沉颂,需要消耗大量的資源
  • nonatomic:非線程安全,適合內(nèi)存小的移動(dòng)設(shè)備

iOS 開(kāi)發(fā)的建議

  • 所有屬性都聲明為 nonatomic
  • 盡量避免多線程搶奪同一塊資源
  • 盡量將加鎖悦污、資源搶奪的業(yè)務(wù)邏輯交給服務(wù)器端處理铸屉,減小移動(dòng)客戶(hù)端的壓力
    11:線程和runloop的關(guān)系
    1:runloop與線程是一一對(duì)應(yīng)的,一個(gè)runloop對(duì)應(yīng)一個(gè)核心的線程切端,為什么說(shuō)是核心的彻坛,是因?yàn)閞unloop是可以嵌套的,但是核心的只能有一個(gè)帆赢,他們的關(guān)系保存在一個(gè)全局的字典里小压。
    2:runloop是來(lái)管理線程的,當(dāng)線程的runloop被開(kāi)啟后椰于,線程會(huì)在執(zhí)行完任務(wù)后進(jìn)入休眠狀態(tài)怠益,有了任務(wù)就會(huì)被喚醒去執(zhí)行任務(wù)。
    3:runloop在第一次獲取時(shí)被創(chuàng)建瘾婿,在線程結(jié)束時(shí)被銷(xiāo)毀蜻牢。
    4:對(duì)于主線程來(lái)說(shuō),runloop在程序一啟動(dòng)就默認(rèn)創(chuàng)建好了偏陪。
    5:對(duì)于子線程來(lái)說(shuō)抢呆,runloop是懶加載的,只有當(dāng)我們使用的時(shí)候才會(huì)創(chuàng)建笛谦,所以在子線程用定時(shí)器要注意:確保子線程的runloop被創(chuàng)建抱虐,不然定時(shí)器不會(huì)回調(diào)。
五大區(qū).png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饥脑,一起剝皮案震驚了整個(gè)濱河市恳邀,隨后出現(xiàn)的幾起案子懦冰,更是在濱河造成了極大的恐慌,老刑警劉巖谣沸,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刷钢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡乳附,警方通過(guò)查閱死者的電腦和手機(jī)内地,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赋除,“玉大人阱缓,你說(shuō)我怎么就攤上這事【倥” “怎么了茬祷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)并蝗。 經(jīng)常有香客問(wèn)我,道長(zhǎng)秸妥,這世上最難降的妖魔是什么滚停? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮粥惧,結(jié)果婚禮上键畴,老公的妹妹穿的比我還像新娘。我一直安慰自己突雪,他們只是感情好起惕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著咏删,像睡著了一般惹想。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上督函,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天嘀粱,我揣著相機(jī)與錄音,去河邊找鬼辰狡。 笑死锋叨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宛篇。 我是一名探鬼主播娃磺,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叫倍!你這毒婦竟也來(lái)了偷卧?” 一聲冷哼從身側(cè)響起豺瘤,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涯冠,沒(méi)想到半個(gè)月后炉奴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛇更,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年瞻赶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片派任。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砸逊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掌逛,到底是詐尸還是另有隱情师逸,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布豆混,位于F島的核電站篓像,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏皿伺。R本人自食惡果不足惜员辩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸵鸥。 院中可真熱鬧奠滑,春花似錦、人聲如沸妒穴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)讼油。三九已至杰赛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矮台,已是汗流浹背淆攻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘿架,地道東北人瓶珊。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像耸彪,于是被迫代替她去往敵國(guó)和親伞芹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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