基礎知識:web
1.進程:正在運行的應用程序多線程
每一個進程之間是獨立的,每一個進程均運行在其專用且受保護的內存空間內併發
2.線程:性能
1個進程要想執行任務,必須得有線程(每1個進程至少要有1條線程)spa
線程是進程的基本執行單元,一個進程(程序)的全部任務都在線程中執行線程
1個線程中任務的執行是串行(順序執行)的設計
若是要在1個線程中執行多個任務,那麼只能一個一個地按順序執行這些任務code
也就是說,在同一時間內,1個線程只能執行1個任務orm
什麼是多線程?進程
1個進程中能夠開啓多條線程,每條線程能夠併發(同時)執行不一樣的任務
進程 車間,線程 車間工人
多線程技術能夠提升程序的執行效率
多線程的原理
同一時間,CPU只能處理1條線程,只有1條線程在工做(執行)
多線程併發(同時)執行,實際上是CPU快速地在多條線程之間調度(切換)
若是CPU調度線程的時間足夠快,就形成了多線程併發執行的假象
思考:若是線程很是很是多,會發生什麼狀況?
CPU會在N多線程之間調度,CPU會累死,消耗大量的CPU資源
每條線程被調度執行的頻次會下降(線程的執行效率下降)
多線程的優勢
能適當提升程序的執行效率
能適當提升資源利用率(CPU、內存利用率)
多線程的缺點
開啓線程須要佔用必定的內存空間(默認狀況下,主線程佔用1M,子線程佔用512KB),若是開啓大量的線程,會佔用大量的內存空間,下降程序的性能
線程越多,CPU在調度線程上的開銷就越大
程序設計更加複雜:好比線程之間的通訊、多線程的數據共享
什麼是主線程?
一個iOS程序運行後,默認會開啓1條線程,稱爲「主線程」或「UI線程」
主線程的主要做用
顯示\刷新UI界面
處理UI事件(好比點擊事件、滾動事件、拖拽事件等)
主線程的使用注意
別將比較耗時的操做放到主線程中
耗時操做會卡住主線程,嚴重影響UI的流暢度,給用戶一種「卡」的壞體驗
//將耗時操做放在主線程中(沒有開啓新的線程,
//程序啓動時會自動建立一個住線程來執行應用程序中的操做)
// [self longTimeOperation];
//耗時操做放到主線程中會形成很差的用戶體驗
代碼以下:
- (void) test5{
//獲得當前線程
NSThread *thread1 = [NSThread currentThread];
//拿到主線程
NSThread *mainThread = [NSThread mainThread];
}
#pragma mark - 耗時操做
- (void)longTimeOperatioin{
for(int i =0;i < 1000;i++){
NSLog(@"耗時操做");
}
}