iOS多線程知識(一) - 基礎(chǔ)知識

iOS多線程知識(二)- NSThread


一.進程

進程是指在系統(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)多線程的四種方法對比
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容