OC 多線程基礎(chǔ)知識(shí):進(jìn)程挑围、線程、并行糖荒、并發(fā)杉辙、線程的生命周期,互斥鎖捶朵,自旋鎖

進(jìn)程(process)

  • 就是一個(gè)運(yùn)行的程序蜘矢,比如一個(gè)運(yùn)行的App。

  • 有獨(dú)立的邏輯內(nèi)存空間综看。

線程(thread)

  • 進(jìn)程中一路單獨(dú)運(yùn)行的程序品腹,一個(gè)進(jìn)程由一個(gè)或多個(gè)線程構(gòu)成。

  • 各線程共享相同的代碼和全局?jǐn)?shù)據(jù)寓搬,但各有其自己的堆棧珍昨。

進(jìn)程和線程的關(guān)系

  • 進(jìn)程之間的內(nèi)存空間是獨(dú)立的,同一進(jìn)程的線程共享進(jìn)程的內(nèi)存空間句喷。

  • 進(jìn)程之間的資源(I/O镣典,CPU)是獨(dú)立的,同一進(jìn)程的線程共享進(jìn)程的資源唾琼。

  • 一個(gè)進(jìn)程奔潰后兄春,不影響其他進(jìn)程。一個(gè)線程奔潰后锡溯,其對(duì)應(yīng)的線程也會(huì)奔潰赶舆。

  • 線程切換比進(jìn)程快。

  • 線程必須在進(jìn)程中才能運(yùn)行祭饭,一個(gè)進(jìn)程知識(shí)擁有一個(gè)線程芜茵。

并行(parallel)

在一個(gè)時(shí)間點(diǎn),幾個(gè)線程同時(shí)進(jìn)行倡蝙,CPU數(shù)大于線程數(shù)九串。

并發(fā)(concurrent)

在一個(gè)時(shí)間段內(nèi),幾個(gè)線程同時(shí)執(zhí)行,如果CPU數(shù)小于線程數(shù)猪钮,并發(fā)是CPU在線程之間快速切換的結(jié)果品山,造成多線程并行的假象。

多線程

  • 同一時(shí)間內(nèi)烤低,多個(gè)線程同時(shí)進(jìn)行肘交。

  • 如果CPU數(shù)大于線程數(shù),這是真正的并行

  • 如果CPU數(shù)小于線程數(shù)扑馁,這是并發(fā)涯呻,CPU在線程之間快速切換,照成并行的假象

線程的生命周期

OC 線程的生命周期.png
  • 當(dāng)線程對(duì)象被創(chuàng)建后腻要,調(diào)用start方法進(jìn)入就緒狀態(tài)(Runnable魄懂,也稱為ready),此時(shí)線程加入可調(diào)度線程池等待執(zhí)行闯第。

  • CPU通過(guò)調(diào)度當(dāng)前線程運(yùn)行它市栗,當(dāng)線程運(yùn)行完之后,結(jié)束線程咳短。

  • CPU在調(diào)度線程過(guò)程中填帽,CPU的多核機(jī)制(快速切換,并發(fā)執(zhí)行)會(huì)調(diào)用其他線程同時(shí)執(zhí)行咙好。

  • 當(dāng)一個(gè)線程正在運(yùn)行過(guò)程中篡腌,如果調(diào)用了 Sleep 或者同步鎖(@synchronized()),則會(huì)阻塞線程執(zhí)行勾效,這會(huì)將線程從可調(diào)度池中移出嘹悼,當(dāng)Sleep 或者同步鎖(@synchronized()),會(huì)重新將線程加入可調(diào)度池進(jìn)入就緒狀態(tài)层宫。

線程安全

在一個(gè)進(jìn)程中杨伙,多個(gè)線程在同時(shí)執(zhí)行,線程之間可能會(huì)訪問(wèn)同一地址空間資源萌腿,這樣可能會(huì)導(dǎo)致數(shù)據(jù)錯(cuò)亂限匣,需要一定的機(jī)制保證多線程訪問(wèn)資源的搶奪,這個(gè)機(jī)制就是鎖毁菱,鎖可以保證米死,同?時(shí)間,只有?條線程能夠執(zhí)?贮庞,從而可以確保該代碼的正確性峦筒。

互斥鎖 (pthread_mutex)

  • 如果共享數(shù)據(jù)已經(jīng)有其他線程加鎖了,線程會(huì)進(jìn)入休眠狀態(tài)等待鎖窗慎。一旦被訪問(wèn)的資源被解鎖物喷,則等待資源的線程會(huì)被喚醒。

  • 互斥鎖范圍,應(yīng)該盡量懈俊;鎖定范圍越大伏伐,效率越差宠进。

  • 能夠給任意NSObject對(duì)象加鎖。

自旋鎖(OSSpinLock)

  • 與互斥鎖(阻塞-睡眠)不同藐翎,自旋鎖加鎖后是進(jìn)入忙等狀態(tài)材蹬。

  • 如果共享數(shù)據(jù)已經(jīng)有其他線程加鎖了,線程會(huì)以忙等的方式等待鎖吝镣,一旦被訪問(wèn)的資源被解鎖堤器,則等待資源的線程會(huì)立即執(zhí)行。

  • OSSpinLock效率很高末贾,但是已不再安全(如果一個(gè)低優(yōu)先級(jí)的線程獲得鎖并訪問(wèn)共享資源闸溃,這時(shí)一個(gè)高優(yōu)先級(jí)的線程也嘗試獲得這個(gè)鎖,它會(huì)處于 spin lock 的忙等狀態(tài)從而占用大量 CPU拱撵。)

?著作權(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)店門妆距,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(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