首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

iOS 多線程入門詳解:從進程、線程到 GCD 實戰

     編輯:Java 相關知識

iOS 多線程入門詳解

近期面試複習多線程知識,希望能加深理解。本文從進程、線程基本概念出發,逐步講解串行、併發、多線程原理、主線程職責及耗時操作實戰演示。

1. 什麼是進程?

  • 進程是系統中運行的一個應用程式。
  • 每個進程獨立存在,運行在自己專用且受保護的記憶體空間中。
  • 例如:打開 QQ 和 Xcode,系統會分別啟動兩個進程。
  • 可透過「活動監視器」查看 Mac 系統中所有啟動的進程。

2. 什麼是線程?

  • 一個進程若要執行任務,必須有線程;一個進程至少有一個線程。
  • 線程是進程的基本執行單元,進程的所有任務都在線程中執行。
  • 例如:使用酷狗播放音樂、迅雷下載電影都需在線程中運行。

3. 線程的串行執行

  • 一個線程中任務是串行(按順序)執行的,同一時間內只能執行一個任務。
  • 例如:單線程下載 3 個檔案(A、B、C),必須等 A 完成才能開始 B。

4. 什麼是多線程?

  • 一個進程中可開啟多個線程,每個線程可並發(同時)執行不同任務。
  • 類比關係:進程 → 車間;線程 → 車間工人。
  • 多線程圖解:同時開啟 3 個線程分別下載 3 個檔案(A、B、C),可並行進行。

5. 多線程原理

  • 同一時間 CPU 只能執行一個線程,只有單線程在工作(執行)。
  • 多線程並發執行,實際上是 CPU 快速在多線程間調度(切換)。
  • 若 CPU 調度速度夠快,會產生多線程並發執行的假象。

多線程缺點

  • 每個線程佔用一定記憶體(主線程 1MB,子線程 512KB),開啟過多導致記憶體佔用大、效能下降。
  • 線程越多,CPU 調度開銷越大(類比工廠工人越多,管理成本越高)。
  • 程式設計更複雜:如多線程數據通信、數據共享同步問題。

多線程優點

  • 能適當提高程式執行效率。
  • 能適當提高資源利用率(CPU、記憶體利用率)。

6. 什麼是主線程?

  • iOS 程式啟動後預設開啟一個線程,稱為「主線程」或「UI 線程」。
  • 主要作用:顯示/刷新 UI 界面、處理 UI 事件(點擊、滾動、拖拽等)。
  • 注意:不要將耗時操作放在主線程,會導致介面卡頓。

7. 耗時操作 Demo 演示

直接在主線程執行(會卡頓)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"%s----%@",__func__,[NSThread currentThread]);
    // 直接在主線程執行,導致 UI 操作卡頓
    [self longTimeOperation];
}
#pragma mark - 耗時操作
-(void)longTimeOperation{
    for (int i=0; i<100000; i++) {
        NSLog(@"%d",i);
    }
}

在子線程執行(不阻塞 UI)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"%s----%@",__func__,[NSThread currentThread]);
    // 將耗時操作放在子線程執行,不影響 UI 操作
    [self performSelectorInBackground:@selector(longTimeOperation) withObject:nil];
}
#pragma mark - 耗時操作
-(void)longTimeOperation{
    for (int i=0; i<100000; i++) {
        NSLog(@"%d",i);
    }
}

以上內容介紹了 iOS 多線程基礎知識,希望對大家有所幫助!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved