iOS多线程简述
文章目錄
##基本概念
進程:是指在系統中正在運行的一個應用程序。每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空間內。
線程:線程是進程的基本執行單元
進程和線程比較
1.線程是CPU調用(執行任務)的最小單位。
2.進程是CPU分配資源和調度的單位。
3.一個程序可以對應多個進程,一個進程中可以有多個線程,但至少要有一個線程。
4.同一個進程內的線程共享進程的資源。
多線程:即1個進程中可以開啟多條線程,每條線程可以并行(同時)執行不同的任務。
多線程的并行
- 原理:多線程并發(同時)執行,其實是CPU快速地在多條線程之間調度(切換)
- 優點:①能適當提高程序的執行效率;②能適當提高資源利用率(CPU、內存利用率)
- 缺點:①開啟線程需要占用一定的內存空間,如果開啟大量的線程,會占用大量的內存空間,降低程序的性能;②線程越多,CPU在調度線程上的開銷就越大;③程序設計更加復雜:比如線程之間的通信、多線程的數據共享
iOS開發中多線程
- 主線程: 一個iOS程序運行后,默認會開啟1條線程,稱為“主線程”或“UI線程”;主要作用是:①刷新和顯示UI,②處理UI事件
- 子線程:除了主線程之外的所有線程,也叫做后臺線程,`
- 注意:①不要將耗時操作放到主線程中去處理,會卡住線程;②和UI相關的刷新操作必須放到主線程中進行處理;
iOS開發中多線程
- pthread
- NSThread
- GCD
- NSOperation
四種技術方案的比較:
| pthread | 一套通用的多線程API,適用于Unix\Linux\Windows等系統,跨平臺\可移植,使用難度大. | C | 程序員管理 | 幾乎不用 |
| NSThread | 使用更加面向對象,簡單易用,可直接操作線程對象. | OC | 程序員管理 | 偶爾使用 |
| GCD | 旨在替代NSThread等線程技術,充分利用設備的多核. | C | 自動管理 | 經常使用 |
| NSOperation | 基于GCD(底層是GCD),比GCD多了一些更簡單實用的功能,使用更加面向對象. | OC | 自動管理 | 經常使用 |
##線程狀態
線程的狀態有:創建,就緒,運行,阻塞,死亡,具體過程由下圖所示:
- 創建線程后,當調用start方法時就會進入可調度線程池進入就緒狀態,
- 如果CPU現在調度當前線程對象,則當前線程對象進入運行狀態,如果CPU調度其他線程對象,則當前線程對象回到就緒狀態。
- 如果CPU在運行當前線程對象的時候調用了sleep方法\等待同步鎖,則當前線程對象就進入了阻塞狀態,等到sleep到時\得到同步鎖,則回到就緒狀態。
- 如果CPU在運行當前線程對象的時候線程任務執行完畢\異常強制退出,則當前線程對象進入死亡狀態。
##多線程的安全隱患
一塊資源可能會被多個線程共享,也就是多個線程可能會訪問同一塊資源,比如多個線程訪問同一個對象、同一個變量、同一個文件,當多個線程訪問同一塊資源時,很容易引發數據錯亂和數據安全問題.
##安全隱患解決
互斥鎖
互斥鎖使用格式:
@synchronized(鎖對象) { // 需要鎖定的代碼 }
注意:鎖定1份代碼只用1把鎖,用多把鎖是無效的
互斥鎖的優缺點
優點:能有效防止因多線程搶奪資源造成的數據安全問題
缺點:需要消耗大量的CPU資源
互斥鎖的使用前提:多條線程搶奪同一塊資源
##原子和非原子屬性
OC在定義屬性時有nonatomic和atomic兩種選擇
atomic:原子屬性,為setter方法加鎖(默認就是atomic)
nonatomic:非原子屬性,不會為setter方法加鎖
nonatomic和atomic對比
atomic:線程安全,需要消耗大量的資源
nonatomic:非線程安全,適合內存小的移動設備
iOS開發的建議
所有屬性都聲明為nonatomic
盡量避免多線程搶奪同一塊資源
盡量將加鎖、資源搶奪的業務邏輯交給服務器端處理,減小移動客戶端的壓力
##線程間通信
什么叫做線程間通信
在1個進程中,線程往往不是孤立存在的,多個線程之間需要經常進行通信
線程間通信的體現
1個線程傳遞數據給另1個線程
在1個線程中執行完特定任務后,轉到另1個線程繼續執行任務
線程間通信常用方法(NSObject)
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;
總結
- 上一篇: linux用telnet检查端口,lin
- 下一篇: 信息安全保障人员CISAW证书期延续、续