天天看點

iOS開發之多線程基礎

本文主要介紹和多線程相關的知識。首先了解以下概念

1、          程序:

(1)   程序是指在系統中正在運作的一個應用程式

(2)   每個程序之間是獨立的(每個應用之間是獨立的),每個程序均在其專用且受保護的記憶體空間内(可了解為沙盒)。比如手機記憶體同時運作QQ程序,音樂程序。(一邊聽歌一邊聊QQ,互不幹擾)

2、          線程:

(1)   一個程序要想執行任務,必須得有線程(每個程序至少要有一個線程)

(2)   線程是程序的基本執行單元,一個程序(程式)的所有任務都線上程中執行。

如下圖,使用酷狗播放音樂、使用迅雷下載下傳電影

iOS開發之多線程基礎

3、          任務:

(1)   一個線程中任務的執行是串行的

(2)   如果一個線程中執行多個任務,那麼隻能一個一個地按順序執行這些任務

(3)   即同一時間内,一個線程隻能執行一個任務

是以,也可以認為線程是程序中執行任務的一條路徑。

iOS開發之多線程基礎

了解了以上概念,下面就認識跟多線程相關的概念。

1、          多線程:

(1)   一個程序中可以開啟多條線程,每條線程可以并發(同時)執行不同的任務

比如,酷狗音樂一邊聽歌一邊下載下傳别的歌曲(一個酷狗程序開啟了兩條線程,一個聽歌,一個下載下傳歌曲)

iOS開發之多線程基礎

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 自動管理 經常使用

本文就介紹到這裡,關于多線程的更多内容将在下面的文章介紹。

繼續閱讀