多線程的概念
即1個進(jìn)程中可以開啟多條多線程抛计,每條線程可以并行(同時)執(zhí)行不同的任務(wù)
進(jìn)程 —>車間 吹截,線程—>工人
即同一個車間,可以有多個工人同時執(zhí)行不同的工作
線程的并行
并行即同時執(zhí)行晨逝。比如同事開啟3條線程分別下載3個文件(分別是文件A懦铺,文件B,文件C)
多線程并發(fā)執(zhí)行的原理
在同一時間里,cpu只能處理1條線程趁窃,只有1條線程在工作(執(zhí)行)醒陆,多線程并發(fā)(同時)執(zhí)行裆针,其實是cpu快速地在多線程之間調(diào)度(切換),如果cpu調(diào)度線程的時間足夠快澡刹,就造成了多線程并發(fā)執(zhí)行的假象
多線程的優(yōu)缺點
優(yōu)點
1)能適當(dāng)提高程序的執(zhí)行效率
2)能適當(dāng)提高資源利用率(cpu耘婚、內(nèi)存利用率)
缺點
- 開啟線程需要占用一定的內(nèi)存空間(默認(rèn)情況下,主線程占用1M己莺,子線程占用512KB),如果開啟大量的線程戈轿,會占用大量的內(nèi)存空間,降低程序的性能
2 ) 線程越多胜蛉,CPU在調(diào)度線程上的開銷就越大 - 程序設(shè)計更加復(fù)雜:比如線程之間的通信色乾、多線程的數(shù)據(jù)共享
4)如果開啟大量的線程,會降低程序的性能
多線程在iOS開發(fā)中的應(yīng)用
主線程
1)一個iOS程序運行后暖璧,默認(rèn)開啟一條線程澎办,稱為“主線程”或“UI線程”
2)作用:刷新顯示UI,處理UI事件(比如點擊事件麦锯,滾動事件,拖拽事件)
使用注意
1)不要將耗時操作放在主線程中區(qū)處理扶欣,會卡住線程
2)和UI相關(guān)的刷新操作必須放在主線程中進(jìn)行處理
iOS中多線程的實現(xiàn)方案
1.pthread
1.特點:
1)一套通用的多線程API
2)適用于Unix\Linux|Windows等系統(tǒng)
3)跨平臺\可移植
4)使用難度大
2.使用語言:c語言
3.使用頻率:幾乎不用
4.線程生命周期:由程序員進(jìn)行管理
NSThread
1.特點:
1)使用更加面向?qū)ο?br>
2)簡單易用料祠,可直接操作線程對象
2.使用語言:OC語言
3.使用頻率:偶爾使用
4.線程生命周期:由程序員進(jìn)行管理
GCD
1.特點
1)旨在替代NSThread等線程技術(shù)
2)充分利用設(shè)備的多核(自動)
2.使用語言:C語言
3.使用頻率:經(jīng)常使用
4.線程生命周期:自動管理
NSOperation
1.特點:
1)基于GCD(底層是GCD)
2)比GCD多了一些更簡單實用的功能
3)使用更加面向?qū)ο?br>
2.使用語言:OC語言
3.使用頻率:經(jīng)常使用
4.線程生命周期:自動管理
GCD
GCD的基本知識:
1.兩個核心概念:隊列和任務(wù)
2.同步函數(shù)和異步函數(shù)
GCD基本使用
1.異步函數(shù)+并發(fā)隊列:開啟多條線程术陶,并發(fā)執(zhí)行任務(wù)
2.異步函數(shù)+串行隊列:開啟一條線程煤痕,串行執(zhí)行任務(wù)
3.同步函數(shù)+并發(fā)隊列:不開線程,串行執(zhí)行任務(wù)
4.同步函數(shù)+串行隊列:不開線程摆碉,串行執(zhí)行任務(wù)
5.異步函數(shù)+主隊列:不開線程,在主線程中串行執(zhí)行任務(wù)
6.同步函數(shù)+主隊列:不開線程忌卤,串行執(zhí)行任務(wù)(注意死鎖發(fā)生)
7.注意同步函數(shù)和異步函數(shù)在執(zhí)行順序上面的差異