多線程
基本概念
進程
- 進程是指在系統中正在運行的一個應用程序
- 每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空間內
- 通過
活動監視器
可以查看Mac
系統中所開啓的進程
線程
- 進程要想執行任務,必須得有線程,進程至少要有一條線程
- 程序啓動會默認開啓一條線程,這條線程被稱爲
主線程
或UI 線程
- 線程是進程的基本執行單元,進程的所有任務都在線程中執行
多線程
- 一個進程中可以開啓多條線程,每條線程可以
同時
執行不同的任務
進程
-> 公司線程
-> 員工主線程
-> 老闆(第一個員工)
- 多線程技術可以提高程序的執行效率
多線程原理
- 同一時間,CPU只能處理一條線程,只有一條線程在執行
- 多線程同時執行,其實是CPU快速地在多條線程之間切換
- 如果CPU調度線程的時間足夠快,就造成了多線程併發執行的
假象
- 如果線程非常多,會在多條線程之間來回切換,消耗大量的 CPU 資源
- 每個線程被調度的次數會降低
- 線程的執行效率會下降
iOS 8.0 主線程的默認堆棧大小也是
512K
多線程優缺點
優點
- 能適當提高程序的執行效率
- 能適當提高資源利用率(CPU、內存利用率)
缺點
- 開啓線程需要佔用一定的內存空間,如果開啓大量的線程,會佔用大量的內存空間,降低程序的性能
- 線程越多,CPU在調度線程上的開銷就越大
- 程序設計更加複雜:比如線程之間的通信、多線程的數據共享
主線程
- 程序啓動創建的線程,被稱爲
主線程
或UI 線程
- 主線程的作用
- 顯示/刷新 UI 界面
- 處理 UI 事件:
點擊
、滾動
、拖拽
等事件
注意:要將
耗時操作
放在後臺線程執行,否則會影響 UI 的流暢度,破壞用戶體驗
- 所有網絡訪問都是耗時操作!
iOS中多線程的實現方案
方案 | 簡介 | 語言 | 線程生命週期 | 使用頻率 |
---|---|---|---|---|
pthread |
|
C | 程序員管理 | 幾乎不用 |
NSThread |
|
OC | 程序員管理 | 偶爾使用 |
GCD |
|
C | 自動管理 | 經常使用 |
NSOperation |
|
OC | 自動管理 | 經常使用 |