*關(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)同步塊