一、進程與線程
1、什么是進程?
- 進程是指在系統(tǒng)中正在運行的一個應(yīng)用程序,它是系統(tǒng)分配資源的基本單元。
- 每個進程之間是獨立的,均運行在其專用且受保護的內(nèi)存空間內(nèi),擁有獨立運行所需的全部資源。

比如同時打開QQ、Xcode,系統(tǒng)就會分別啟動2個進程,通過“活動監(jiān)視器”可以查看Mac系統(tǒng)中所開啟的進程。
2、什么是線程?
- 線程是CPU調(diào)度的最小單元,也是進程的基本執(zhí)行單元,進程(程序)的所有任務(wù)都在線程中執(zhí)行,線程是進程中的一個實體。
- 一個進程想要執(zhí)行任務(wù),必須至少有一條線程。應(yīng)用程序啟動的時候,系統(tǒng)會默認(rèn)開啟一條線程,也就是主線程。
- 同一個進程內(nèi)的線程共享進程資源。
比如使用酷狗播放音樂、使用迅雷下載電影,都需要在線程中執(zhí)行

3、線程的串行
一個線程中任務(wù)的執(zhí)行是串行的,如果要在一個線程中執(zhí)行多個任務(wù),那么只能一個一個地按順序執(zhí)行這些任務(wù),也就是說,在同一時間內(nèi),一個線程只能執(zhí)行一個任務(wù)。
比如在一個線程中下載3個文件(分別是文件A、文件B、文件C)

二、多進程與多線程
1、多進程
打開mac的活動監(jiān)視器,可以看到很多個進程同時運行
- 進程是程序在計算機上的一次執(zhí)行活動。當(dāng)你運行一個程序,你就啟動了一個進程。顯然,程序是死的(靜態(tài)的),進程是活的(動態(tài)的)。
- 進程可以分為系統(tǒng)進程和用戶進程。凡是用于完成操作系統(tǒng)的各種功能的進程就是系統(tǒng)進程,它們就是處于運行狀態(tài)下的操作系統(tǒng)本身;所有由用戶啟動的進程都是用戶進程。
- 進程又被細(xì)化為線程,也就是一個進程下有多個能獨立運行的更小的單元。在同一個時間里,一個計算機系統(tǒng)中如果允許兩個或兩個以上的進程處于運行狀態(tài),這便是多進程。
2、多線程
一個進程中可以開啟多條線程,每條線程可以并行(同時)執(zhí)行不同的任務(wù),多線程技術(shù)可以提高程序的執(zhí)行效率(進程→車間,線程→車間工人)
比如同時開啟3條線程分別下載3個文件(分別是文件A、文件B、文件C)


3、多線程的原理
同一時間,CPU只能處理一條線程,只有一條線程在工作(執(zhí)行),多線程并發(fā)(同時)執(zhí)行,其實是CPU快速地在多條線程之間調(diào)度(切換),如果CPU調(diào)度線程的時間足夠快,就造成了多線程并發(fā)執(zhí)行的假象。
4、思考:如果線程非常非常多,會發(fā)生什么情況?
答:CPU會在N多線程之間調(diào)度,消耗大量的CPU資源,每條線程被調(diào)度執(zhí)行的頻次會降低(線程的執(zhí)行效率降低)
5、多線程的優(yōu)點
- 能適當(dāng)提高程序的執(zhí)行效率
- 能適當(dāng)提高資源利用率(CPU、內(nèi)存利用率)
6、多線程的缺點
- 開啟線程需要占用一定的內(nèi)存空間(默認(rèn)情況下,主線程占用1M,子線程占用512KB),如果開啟大量的線程,會占用大量的內(nèi)存空間,降低程序的性能
- 線程越多,CPU在調(diào)度線程上的開銷就越大
- 程序設(shè)計更加復(fù)雜:比如線程之間的通信、多線程的數(shù)據(jù)共享
7、多線程在iOS開發(fā)中的應(yīng)用
主線程:一個iOS程序運行后,默認(rèn)會開啟一條線程,稱為“主線程”或“UI線程”
主要作用:顯示\刷新UI界面,處理UI事件(比如點擊事件、滾動事件、拖拽事件等)
使用注意:別將比較耗時的操作放到主線程中。耗時操作會卡住主線程,嚴(yán)重影響UI的流暢度,給用戶一種“卡”的壞體驗