一、進程
- 進程是指在系統(tǒng)中正在運行的一個應(yīng)用程序
- 每個進程之間是獨立的,每個進程均運行在其專用且受保護的內(nèi)存空間內(nèi)
二、線程
- 基本概念
- 1個進程要想執(zhí)行任務(wù),必須得有線程(每1個進程至少要有1條線程)
- 線程是進程的基本執(zhí)行單元,一個進程(程序)的所有任務(wù)都在線程中執(zhí)行
- 線程的串行
- 1個線程中任務(wù)的執(zhí)行是串行的
- 如果要在1個線程中執(zhí)行多個任務(wù),那么只能一個一個地按順序執(zhí)行這些任務(wù)
- 也就是說,在同一時間內(nèi),1個線程只能執(zhí)行1個任務(wù)
三、多線程
- 基本概念
- 即1個進程中可以開啟多條線程,每條線程可以并行(同時)執(zhí)行不同的任務(wù)
- 線程的并行
- 并行即同時執(zhí)行。比如同時開啟3條線程分別下載3個文件(分別是文件A、文件B、文件C
- 多線程并發(fā)執(zhí)行的原理
- 在同一時間里,CPU只能處理1條線程,只有1條線程在工作(執(zhí)行)
- 多線程并發(fā)(同時)執(zhí)行,其實是CPU快速地在多條線程之間調(diào)度(切換),如果CPU調(diào)度線程的時間足夠快,就造成了多線程并發(fā)執(zhí)行的假象
- 多線程優(yōu)缺點
- 優(yōu)點:
能適當提高程序的執(zhí)行效率;
能適當提高資源利用率(CPU、內(nèi)存利用率)。 - 缺點
開啟線程需要占用一定的內(nèi)存空間(默認情況下,主線程占用1M,子線程占用512KB),如果開啟大量的線程,會占用大量的內(nèi)存空間,降低程序的性能;
線程越多,CPU在調(diào)度線程上的開銷就越大;
程序設(shè)計更加復(fù)雜:比如線程之間的通信、多線程的數(shù)據(jù)共享。
四、多線程在iOS開發(fā)中的應(yīng)用
- 主線程
- 一個iOS程序運行后,默認會開啟1條線程,稱為“主線程”或“UI線程”
- 作用:刷新顯示UI,處理UI事件
- 使用注意
- 不要將耗時操作放到主線程中去處理,因為會卡住線程
- 和UI相關(guān)的刷新操作必須放到主線程中進行處理
五、iOS中多線程的實現(xiàn)方案
- pthread
- 一套通用的多線程API
- 適用于Unix\Linux\Windows等系統(tǒng)
- 跨平臺\可移植
- 使用難度大
- 使用語言:c語言
- 線程生命周期:由程序員進行管理
- NSThread
- 使用更加面向?qū)ο?/li>
- 簡單易用,可直接操作線程對象
- 使用語言:OC語言
- 線程生命周期:由程序員進行管理
- GCD
- 旨在替代NSThread等線程技術(shù)
- 充分利用設(shè)備的多核(自動)
- 使用語言:C語言
- 線程生命周期:自動管理
- NSOperation
- 基于GCD(底層是GCD)
- 比GCD多了一些更簡單實用的功能
- 使用更加面向?qū)ο?/li>
- 使用語言:OC語言
- 線程生命周期:自動管理