1-- 基本概念
01進(jìn)程
? ? ? 是指在系統(tǒng)中正在運(yùn)行的一個應(yīng)用程序。每個進(jìn)程之間是獨(dú)立的碾褂,每個進(jìn)程均運(yùn)行在其專用且受保護(hù)的內(nèi)存空間內(nèi)。
02線程
2-1基本概念
? ? 1個進(jìn)程要想執(zhí)行任務(wù),必須得有線程(每1個進(jìn)程至少要有1條線程)秀睛,線程是進(jìn)程的基本執(zhí)行單元币他,一個進(jìn)程(程序)的所有任務(wù)都在線程中執(zhí)行坞靶。
2-2線程的串行
1個線程中任務(wù)的執(zhí)行是串行的,如果要在1個線程中執(zhí)行多個任務(wù)蝴悉,那么只能一個一個地按順序執(zhí)行這些任務(wù)彰阴。也就是說,在同一時間內(nèi)拍冠,1個線程只能執(zhí)行1個任務(wù)尿这。
03--多線程
3-1基本概念
即1個進(jìn)程中可以開啟多條線程,每條線程可以并行(同時)執(zhí)行不同的任務(wù)庆杜。
3-2線程的并行
并行即同時執(zhí)行射众。比如同時開啟3條線程分別下載3個文件(分別是文件A、文件B晃财、文件C叨橱。
3-3多線程并發(fā)執(zhí)行的原理
在同一時間里,CPU只能處理1條線程,只有1條線程在工作(執(zhí)行)罗洗。多線程并發(fā)(同時)執(zhí)行愉舔,其實(shí)是CPU快速地在多條線程之間調(diào)度(切換),如果CPU調(diào)度線程的時間足夠快伙菜,就造成了多線程并發(fā)執(zhí)行的假象
3-4多線程優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
1)能適當(dāng)提高程序的執(zhí)行效率轩缤。
2)能適當(dāng)提高資源利用率(CPU、內(nèi)存利用率)
缺點(diǎn)
1)開啟線程需要占用一定的內(nèi)存空間(默認(rèn)情況下贩绕,主線程占用1M典奉,子線程占用512KB),如果開啟大量的線程丧叽,會占用大量的內(nèi)存空間卫玖,降低程序的性能。
2)線程越多踊淳,CPU在調(diào)度線
程上的開銷就越大假瞬。
3)程序設(shè)計(jì)更加復(fù)雜:比如線程之間的通信、多線程的數(shù)據(jù)共享
04--多線程在iOS開發(fā)中的應(yīng)用
4-1主線程
1)一個iOS程序運(yùn)行后迂尝,默認(rèn)會開啟1條線程脱茉,稱為“主線程”或“UI線程”。
2)作用垄开。刷新顯示UI,處理UI事件琴许。
4-2使用注意
1)不要將耗時操作放到主線程中去處理,會卡住線程溉躲。
2)和UI相關(guān)的刷新操作必須放到主線程中進(jìn)行處理榜田。
05--iOS中多線程的實(shí)現(xiàn)方案
5-1pthread
a.特點(diǎn):
(1)一套通用的多線程API; ? ?(2)適用于Unix\Linux\Windows等系統(tǒng) ; (3)跨平臺\可移植 ; ? ??(4)使用難度大 ?
b.使用語言:c語言 ??
?c.使用頻率:幾乎不用 ??
d.線程生命周期:由程序員進(jìn)行管理
5-2NSThread
a.特點(diǎn):
1)使用更加面向?qū)ο?/p>
2)簡單易用,可直接操作線程對象
b.使用語言:OC語言
c.使用頻率:偶爾使用
d.線程生命周期:由程序員進(jìn)行管理
5-3GCD
a.特點(diǎn):
1)旨在替代NSThread等線程技術(shù)
2)充分利用設(shè)備的多核(自動)
b.使用語言:C語言
c.使用頻率:經(jīng)常使用
d.線程生命周期:自動管理
5-4NSOperation
a.特點(diǎn):
1)基于GCD(底層是GCD)
2)比GCD多了一些更簡單實(shí)用的功能
3)使用更加面向?qū)ο?/p>
b.使用語言:OC語言
c.使用頻率:經(jīng)常使用
d.線程生命周期:自動管理
2 pthread
3 NSThread
(1)NSThread的基本使用
(2)設(shè)置線程的屬性
(3)線程的狀態(tài)(了解)
(4)線程安全
01 前提:多個線程訪問同一塊資源會發(fā)生數(shù)據(jù)安全問題
02 解決方案:加互斥鎖
03 相關(guān)代碼:@synchronized(self){}
04 專業(yè)術(shù)語-線程同步
05 原子和非原子屬性(是否對setter方法加鎖)
(5)線程間通信
(6)如何計(jì)算代碼段的執(zhí)行時間
4--GCD
(1)GCD基本知識
01 兩個核心概念-隊(duì)列和任務(wù)
02 同步函數(shù)和異步函數(shù)
(2)GCD基本使用【重點(diǎn)】
01異步函數(shù)+并發(fā)隊(duì)列:開啟多條線程锻梳,并發(fā)執(zhí)行任務(wù)
02異步函數(shù)+串行隊(duì)列:開啟一條線程箭券,串行執(zhí)行任務(wù)
03同步函數(shù)+并發(fā)隊(duì)列:不開線程,串行執(zhí)行任務(wù)
04同步函數(shù)+串行隊(duì)列:不開線程疑枯,串行執(zhí)行任務(wù)
05異步函數(shù)+主隊(duì)列:不開線程辩块,在主線程中串行執(zhí)行任務(wù)
06同步函數(shù)+主隊(duì)列:不開線程,串行執(zhí)行任務(wù)(注意死鎖發(fā)生)
07注意同步函數(shù)和異步函數(shù)在執(zhí)行順序上面的差異
(3)GCD線程間通信
(4)GCD其它常用函數(shù)
圖8