基本概念
進程是指在系統(tǒng)中正在運行的一個應用程序,每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空間內
-
線程
- 1個進程要想執(zhí)行任務,必須得有線程(每1個進程至少要有1條線程)
- 1個進程(程序)的所有任務都在線程中執(zhí)行
-
線程的串行
- 一個線程中任務的執(zhí)行時串行的,就是在同一時間內,1個線程只能執(zhí)行1個任務
- 在1個線程中執(zhí)行多個任務,只能一個一個地按順序執(zhí)行這些任務
-
多線程
1個進程中可以開啟多條線程,每條線程可以并行(同時)執(zhí)行不同的任務
-
多線程的優(yōu)點
- 能適當提高程序的執(zhí)行效率
- 能適當提高資源利用率(CPU、內存利用率)
-
多線程的缺點
- 創(chuàng)建線程是有開銷的,iOS下主要成本包括:內核數(shù)據(jù)結構(大約1KB)、??臻g(子線程512KB、主線程1MB,也可以使用-setStackSize:設置,但必須是4K的倍數(shù),而且最小是16K),創(chuàng)建線程大約需要90毫秒的創(chuàng)建時間
- 如果開啟大量的線程,會降低程序的性能
- 線程越多,CPU在調度線程上的開銷就越大
- 程序設計更加復雜:比如線程之間的通信、多線程的數(shù)據(jù)共享
- 耗電、發(fā)熱
多線程在IOS中的應用
- 一個iOS程序運行后,默認會開啟1條線程,稱為“主線程”或“UI線程”
- 主線程的主要作用
顯示\刷新UI界面
處理UI事件(比如點擊事件、滾動事件、拖拽事件等) - 主線程的使用注意
別將比較耗時的操作放到主線程中
耗時操作會卡住主線程,會嚴重影響UI的流暢度
- 主線程的主要作用
IOS中實現(xiàn)多線程的方法

image.png
pthread簡單使用
pthread 屬于 POSIX 多線程開發(fā)框架,是UNIX環(huán)境創(chuàng)建線程函數(shù)
函數(shù)介紹:
參數(shù):
1.指向線程代號的指針
2.線程的屬性
3.指向函數(shù)的指針
4.傳遞給該函數(shù)的參數(shù)
返回值
- 如果是0,標示正確
- 如果非0,標示錯誤代碼
int pthread_create(pthread_t _Nullable * _Nonnull __restrict,
const pthread_attr_t * _Nullable __restrict,
void * _Nullable (* _Nonnull)(void * _Nullable),
void * _Nullable __restrict);
使用:
pthread_t threadID;
NSString *str = @"testPthread";
/**
- 在 ARC 開發(fā)中,如果涉及到和C語言中的相同的數(shù)據(jù)類型進行轉換,需要使用 __bridge "橋接"
- 在 MRC 不需要
*/
int result = pthread_create(&threadID, NULL, &demo, (__bridge void *)(str));
if (result == 0) {
NSLog(@"OK");
}else{
NSLog(@"error %d",result);
}
需要異步執(zhí)行的代碼寫到函數(shù)中,取函數(shù)地址傳入到pthread_create 第三個參數(shù)
void * demo(void * param){
NSLog(@"%@ %@",[NSThread currentThread],param);
return NULL;
}