?
本文并非最終版本,如有更新或更正會第一時間置頂,聯系方式詳見文末
?
如果覺得本文內容過長,請前往本人 “簡書”
?
?
4.0-1.1 進程
- 概念 : 進程是指在系統中正在運行的一個應用程序 (操作系統中每一個 APP 就是一個進程)
- 性質 : 每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空間內
進程為應用程序開辟獨立的內存空間;(這塊內存空間是獨立的,受保護的!進程和進程之間是互不干擾的!)
- 舉例 : 比如同時打開QQ、Xcode,系統就會分別啟動2個進程
- 查看進程 : 通過“活動監視器”可以查看Mac系統中所開啟的進程
- 所有的 UI 操作和 UI 事件都是進程
?
4.0-1.2 線程
|
舉例 :?比如使用酷狗播放音樂、使用迅雷下載電影,都需要在線程中執行 |
|
單個線程 - 串行:
概念 : 1個線程中任務的執行是串行的(在線程中的代碼是按順序執行的!同一時間內,只能有一個代碼塊執行!) |
解析 : 如果要在1個線程中執行多個任務,那么只能一個一個地按順序執行這些任務 也就是說,在同一時間內,1個線程只能執行1個任務 |
舉例 :?比如在1個線程中下載3個文件(分別是文件A、文件B、文件C), 只能一個一個的下載 |
總結 :?因此,也可以認為線程是進程中的1條執行路徑 |

問題:為什么開啟一條新線程之后就能解決卡住主線程這個問題了呢? 答: 因為線程和線程之間是并發執行(同時執行)! |
多個線程 - 并行:多線程
概念 :?1個進程中可以開啟多條線程,每條線程可以并行(同時)執行不同的任務 |
優點 :?多線程技術可以提高程序的執行效率 |
舉例 :?比如同時開啟3條線程分別下載3個文件(分別是文件A、文件B、文件C), 則分別同時下載 |

4.0-1.3 【區別】進程 & 線程
進程是由許多條線程組成,一個進程可以包含很多條線程,每條線程都可以執行不同的代碼!
進程與線程的區別:
(1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位 |
(2)并發性:不僅進程之間可以并發執行,同一個進程的多個線程之間也可并發執行 |
(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬于進程的資源. |
(4)系統開銷:在創建或撤消進程時,由于系統都要為之分配和回收資源,導致系統的開銷明顯大于創建或撤消線程時的開銷。 |
4.0-2.1 多線程原理
多線程原理:(為什么多條線程之間可以并發(同時)執行呢?)
本質 :?同一時間,CPU只能處理1條線程,只有1條線程在工作(執行) 多線程并發(同時)執行,其實是CPU快速地在多條線程之間調度(切換) |
原理 :?如果CPU調度線程的時間足夠快,就造成了多線程并發執行的假象 |
思考:如果線程非常非常多,會發生什么情況? 答案 : 如果線程非常多,會在多條線程之間來回切換,消耗大量的 CPU 資源
CPU會在N多線程之間調度,CPU會累死,消耗大量的CPU資源 每條線程被調度執行的頻次會降低(線程的執行效率降低) |
iOS 8.0 主線程的默認堆棧大小也是 512K |
4.0-2.2 多線程優缺點
多線程的優點 :
(1) 能適當提高程序的執行效率:
|
(2) 能適當提高資源利用率(CPU、內存利用率) |
多線程的缺點 : (既然多線程這么爽, 線程是不是越多越好呢?)
(1) 開啟線程需要占用一定的內存空間(默認情況下,主線程占用1M,子線程占用512KB的棧區空間),如果開啟大量的線程,會占用大量的內存空間,降低程序的性能 |
(2) 線程開啟越多,CPU 就需要在多條線程之間來回切換,CPU在調度線程上的開銷就越大,CPU就越累! |
(3) 開啟線程會提高代碼的復雜性(會使應用程序增加很多代碼!代碼變多之后,程序復雜性就會提高!) 程序設計更加復雜:比如線程之間的通信、多線程的數據共享 |
建議: 在移動應用的開發中; 一般只開3~5條線程!
4.0-2.3 多線程在iOS開發中的應用
主線程 /?UI線程:
概念 :?一個iOS程序運行后,默認會開啟1條線程,稱為“主線程”或“UI線程” (程序啟動創建的線程) |
作用 :?
|
使用注意 :?
|
解決方案 :
好處 :
|
4.0-2.4 iOS中多線程的實現方案

如果你覺得本篇文章對你有所幫助,請點擊右下部“推薦”,^_^
?
作者:藍田(Loto)
出處:http://www.cnblogs.com/shorfng/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
出處:http://www.cnblogs.com/shorfng/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
?
如有疑問,請發送郵件至?shorfng@126.com?聯系我。
?
?