一.進程
進程是指在系統(tǒng)中正在運行的一個應(yīng)用程序(eg:打開QQ會開啟一個進程,同樣打開微信會再次開啟一個新的進程)。每個進程之間是獨立的,每個進程均運行在其專用且受保護的內(nèi)存空間里。
通過“活動監(jiān)視器”可以查看Mac系統(tǒng)中所開啟的所有進程
二.線程
應(yīng)用程序的具體任務(wù)是由線程執(zhí)行的。開啟一個進程(打開一個應(yīng)用程序)之后系統(tǒng)會創(chuàng)建一個主線程。
什么是線程?
- 一個進程要想執(zhí)行任務(wù),必須得有線程
- 線程是進程的基本執(zhí)行單元,一個進程(程序)的所有任務(wù)都在線程中被執(zhí)行
線程的串行:
一個線程中任務(wù)的執(zhí)行是串行的。如果要在一個線程中執(zhí)行多個任務(wù),那么只能一個一個按照順序去執(zhí)行這些任務(wù)
比如在一個線程中執(zhí)行下載三個文件ABC:
按照順序程序需先下載A,其次下載B,最后下載C。最終完成此次下載任務(wù)

一條線程串行執(zhí)行三個下載任務(wù)
三.多線程
從上述舉例的下載任務(wù)不難看出,一個線程串行執(zhí)行下載任務(wù),從效率來說,是遠不足夠的。因此,
出現(xiàn)了多線程技術(shù)的概念。
什么是多線程?
- 一個進程中可以開啟多條線程,每條線程可以并行(同時)執(zhí)行不同的任務(wù)
- 多線程技術(shù)可以提高程序的執(zhí)行效率
比如同時開啟三條線程分別下載ABC三個文件:

三條線程執(zhí)行并行執(zhí)行下載任務(wù)
從上圖可以看出,進程中ABC三個下載任務(wù)是在三個線程中同時進行的,這將大大提高程序的執(zhí)行效率
四.多線程的原理
問題1:多線程并行執(zhí)行下載任務(wù),任務(wù)之間是真的同時進行的嗎?
同一時間,CPU只能處理一條線程,只有一條線程在執(zhí)行。多線程同時并發(fā)執(zhí)行,其實是CPU快速的在多條線程之間切換調(diào)度。如果CPU切換線程的時間足夠快,就造成了一種多條線程同時執(zhí)行任務(wù)的假象。
問題2:線程是不是越多越好?如果線程多了之后會發(fā)生什么情況?
如果線程過多,那么CPU就要在如此多的線程之間不斷地調(diào)度,會消耗大量的CPU資源,CPU會累死。并且,每條線程相應(yīng)來說被調(diào)度執(zhí)行的頻率就會被大大降低,那么線程所執(zhí)行的任務(wù)效率也會降低。
問題3:什么時候開辟分線程?
比較耗時、復雜的操作(eg:下載的東西)可以放在分線程中執(zhí)行,否則這些耗時的操作就會阻塞主線程,出現(xiàn)界面卡頓的現(xiàn)象。
五.多線程的優(yōu)缺點
優(yōu)點:
- 能適當提高程序的運行效率
- 能適當提高資源利用率(CPU、內(nèi)存利用率)
缺點:
- 開啟線程需要占用一定的內(nèi)存空間(默認情況下,主線程占用1M,子線程占用512KB),如果開啟
大量的線程,會占用大量的內(nèi)存空間,降低程序的性能
- 線程越多,CPU在調(diào)度線程上的開銷就越大
- 程序設(shè)計更復雜:比如線程之間的通信,多線程的數(shù)據(jù)共享
六.多線程在iOS開發(fā)中的應(yīng)用
1.主線程的作用:
1.顯示/刷新UI界面
2.處理UI事件(比如點擊事件,滾動事件,拖拽事件)
2.線程的使用注意:
別將比較耗時的操作放在主線程中,耗時操作會卡住主線程,嚴重影響UI的流暢度,給用戶一種卡頓
的糟糕體驗
七.iOS中如何實現(xiàn)多線程

實現(xiàn)多線程的四種方法對比