- 多線程在iOS開發(fā)中是一個(gè)比較常見也十分重要的一門技術(shù)弯淘,首先我們知道每一個(gè)程序運(yùn)行都會(huì)開啟一個(gè)進(jìn)程眼俊,而一個(gè)進(jìn)程想要執(zhí)行任務(wù)整份,必須得有線程(每個(gè)進(jìn)程至少需要一條線程),線程是進(jìn)程最基本的執(zhí)行單元拗踢,一個(gè)進(jìn)程所有的任務(wù)都在線程中執(zhí)行。
- 一個(gè)線程中的任務(wù)是串行的向臀,如果一個(gè)線程中有多個(gè)任務(wù)巢墅,那么只能一個(gè)一個(gè)的按照順序執(zhí)行這些任務(wù)。
- 所謂多線程就是一個(gè)進(jìn)程中開啟多條線程券膀,每條線程可以并行(同時(shí))執(zhí)行不同的任務(wù)君纫,多線程可以提高程序的執(zhí)行效率
多線程的原理:
同一時(shí)間,CPU只能處理1條線程三娩,只有1條線程在工作(執(zhí)行)多線程并發(fā)(同時(shí))執(zhí)行庵芭,其實(shí)是CPU快速地在多條線程之間調(diào)度(切換)如果CPU調(diào)度線程的時(shí)間足夠快,就造成了多線程并發(fā)執(zhí)行的假象雀监。如果線程非常非常多双吆,會(huì)發(fā)生什么情況?CPU會(huì)在N多線程之間調(diào)度会前,CPU會(huì)累死好乐,消耗大量的CPU資源每條線程被調(diào)度執(zhí)行的頻次會(huì)降低(線程的執(zhí)行效率降低)
多線程優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
- 能適當(dāng)?shù)奶岣叱绦虻膱?zhí)行效率;
- 能適當(dāng)?shù)奶岣哔Y源利用率(CPU瓦宜,內(nèi)存利用率)
缺點(diǎn):
- 開啟線程需要占用一定的內(nèi)存空間(默認(rèn)情況下蔚万,主線程占用1M,子線程占用512KB)临庇,如果開啟大量的線程反璃,會(huì)占用大量的內(nèi)存空間昵慌,降低程序的性能
- 線程越多,CPU在調(diào)度線程上的開銷就越大
- 程序設(shè)計(jì)更加復(fù)雜:比如線程之間的通信淮蜈、多線程的數(shù)據(jù)共享
開啟多線程方式
- Pthread 基于比較底層的C語言
- NSThread 基于OC語言斋攀,面向?qū)ο螅芍苯硬僮骶€程對象
- GCD 旨在替代NSThread 梧田,充分利用設(shè)備的多核
- NSOperation 基于GCD淳蔼,比GCD多了一些功能,添加線程依賴裁眯,取消或暫停線程