本文主要介紹和多線程相關的知識。首先了解以下概念
1、 程序:
(1) 程序是指在系統中正在運作的一個應用程式
(2) 每個程序之間是獨立的(每個應用之間是獨立的),每個程序均在其專用且受保護的記憶體空間内(可了解為沙盒)。比如手機記憶體同時運作QQ程序,音樂程序。(一邊聽歌一邊聊QQ,互不幹擾)
2、 線程:
(1) 一個程序要想執行任務,必須得有線程(每個程序至少要有一個線程)
(2) 線程是程序的基本執行單元,一個程序(程式)的所有任務都線上程中執行。
如下圖,使用酷狗播放音樂、使用迅雷下載下傳電影

3、 任務:
(1) 一個線程中任務的執行是串行的
(2) 如果一個線程中執行多個任務,那麼隻能一個一個地按順序執行這些任務
(3) 即同一時間内,一個線程隻能執行一個任務
是以,也可以認為線程是程序中執行任務的一條路徑。
了解了以上概念,下面就認識跟多線程相關的概念。
1、 多線程:
(1) 一個程序中可以開啟多條線程,每條線程可以并發(同時)執行不同的任務
比如,酷狗音樂一邊聽歌一邊下載下傳别的歌曲(一個酷狗程序開啟了兩條線程,一個聽歌,一個下載下傳歌曲)
2、 多線程原理:
(1) 同一時間,CPU隻能處理一條線程,隻有一條線程在工作(在執行任務)
(2) 多線程冰法(同時)執行,其實是CPU快速地在多條線程之間排程(切換)
(3) 如果CPU排程線程的速度足夠快,就造成了多線程冰法執行的假象
那麼如果線程非常非常多,會發生什麼情況呢?
(1) CPU在多條線程之間排程雖然很快,但線程非常多的時候CPU的排程效率會下降,且CPU會消耗大量的資源
(2) 每條線程被排程執行的頻次會降低(線程的執行效率降低)
3、 多線程的優點:
(1) 能适當提高程式的執行效率
(2) 能适當提高資源使用率(CPU、記憶體使用率)
4、 多線程的缺點:
(1) 開啟線程需要占用一定的記憶體空間(預設情況下,主線程電泳1M,子線程占用512K),如果開啟大量的線程,會占用記憶體空間,降低程式性能
(2) 線程越多,CPU在排程線程上的開銷就越大
(3) 長須設計更加複雜:比如線程之間的通信、多線程的資料共享
5、 主線程:
(1) 一個iOS程式運作後,預設會開啟一條線程,稱之為“主線程”或“UI線程”
(2) 主線程的作用:a.顯示\重新整理UI界面;b.處理UI事件(如點選、拖拽等)
(3) 主線程使用注意點:不要将比較耗時的任務放到主線程中
6、 iOS中多線程的實作方案
技術 | 簡介 | 語言 | 線程生命周期 | 使用頻率 |
pthread | 1. 一套通用多線程API 2. 适用于Unix\Linux\Windows等系統 3. 跨平台\可移植 4. 使用難度大(底層) | C | 程式員管理 | 幾乎不用 |
NSThread | 1. 使用更加面向對象 2. 簡單易用,可直接操作線程對象 | OC | 程式員管理 | 偶爾使用 |
GCD | 1. 旨在代替NSThread等線程技術 2. 充分利用裝置的多核 | C | 自動管理 | 經常使用 |
NSOperation | 1. 基于GCD(底層是GCD) 2. 比GCD多了一些更簡單實用的功能 3. 使用更加面向對象 | OC | 自動管理 | 經常使用 |
本文就介紹到這裡,關于多線程的更多内容将在下面的文章介紹。