iOS開(kāi)發(fā)多線程篇--進(jìn)程與線程

*關(guān)于進(jìn)程和線程,本質(zhì)完全不一樣。這一點(diǎn)在操作系統(tǒng)里面講得比較詳細(xì)。往往一些筆試面試題中往往喜歡問(wèn),所以在此加上自己的理解整理一下。(基本概念還是蠻重要的,所謂地基。)

目錄:
* 一 基本概念理解
1 進(jìn)程
2 線程
*二 進(jìn)程和線程的區(qū)別和聯(lián)系
*三 幾個(gè)小概念的理解和區(qū)分
1 同步異步
2 并發(fā)串行
*四 同步線程 異步線程

一 基本概念理解
1 進(jìn)程
進(jìn)程是計(jì)算機(jī)操作系統(tǒng)分配資源的單位,是指系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序,每個(gè)進(jìn)程之間是獨(dú)立的,每個(gè)進(jìn)程均運(yùn)行在其專受保護(hù)的內(nèi)存空間內(nèi)。比如同時(shí)打開(kāi)qq xcode ,系統(tǒng)就會(huì)分別啟動(dòng)2個(gè)進(jìn)程。
2 線程
線程是進(jìn)程的基本執(zhí)行單元,一個(gè)進(jìn)程的所有任務(wù)都在線程中執(zhí)行。
1個(gè)進(jìn)程要執(zhí)行任務(wù),必須得有線程(每個(gè)進(jìn)程至少要有一個(gè)線程)比如使用網(wǎng)易云音樂(lè)下載歌曲,需要在線程中執(zhí)行。

二 進(jìn)程和線程的區(qū)別和聯(lián)系

1 進(jìn)程和線程都是由操作系統(tǒng)所提供的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)對(duì)應(yīng)用的并發(fā)性。
2 進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。
3 進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中不同的執(zhí)行路徑。
4 線程有自己的堆棧和局部變量,但線程之間沒(méi)有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉。所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí),耗費(fèi)資源較大,效率要差一些。
5 一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程,同一個(gè) 進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。
三 幾個(gè)小概念的理解和區(qū)分
1 同步異步
同步異步?jīng)Q定了要不要開(kāi)啟新的線程
同步:在當(dāng)前線程中執(zhí)行任務(wù),不具備開(kāi)啟新線程的能力。
異步:在新的線程中執(zhí)行任務(wù),具備開(kāi)啟新線程的能力。
2 并發(fā)串行
并發(fā)串行 決定了任務(wù)的執(zhí)行方式
并發(fā):多個(gè)任務(wù)并發(fā)(同時(shí))執(zhí)行
串行:一個(gè)任務(wù)執(zhí)行完畢后,在執(zhí)行下一個(gè)任務(wù)
四 同步線程 異步線程
同步線程:串行 主線程是串行的。串行執(zhí)行的任務(wù),會(huì)把你的同步代碼一行一行的執(zhí)行下去
異步線程:并行執(zhí)行的線程

OC中如何實(shí)現(xiàn)線程同步?(多線程訪問(wèn)統(tǒng)一資源的同步問(wèn)題)
(1)NSLock
(2)同步塊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文:http://www.cocoachina.com/ios/20170707/19769.html 本文主要...
    冬的天閱讀 2,418評(píng)論 0 12
  • 從哪說(shuō)起呢? 單純講多線程編程真的不知道從哪下嘴。。 不如我直接引用一個(gè)最簡(jiǎn)單的問(wèn)題,以這個(gè)作為切入點(diǎn)好了 在ma...
    Mr_Baymax閱讀 2,911評(píng)論 1 17
  • 又來(lái)到了一個(gè)老生常談的問(wèn)題,應(yīng)用層軟件開(kāi)發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問(wèn)題開(kāi)始,來(lái)談?wù)劜?..
    tangsl閱讀 4,322評(píng)論 0 23
  • 多線程 在iOS開(kāi)發(fā)中為提高程序的運(yùn)行效率會(huì)將比較耗時(shí)的操作放在子線程中執(zhí)行,iOS系統(tǒng)進(jìn)程默認(rèn)啟動(dòng)一個(gè)主線程,用...
    郭豪豪閱讀 2,721評(píng)論 0 4
  • Object C中創(chuàng)建線程的方法是什么?如果在主線程中執(zhí)行代碼,方法是什么?如果想延時(shí)執(zhí)行代碼、方法又是什么? 1...
    AlanGe閱讀 1,919評(píng)論 0 17

友情鏈接更多精彩內(nèi)容