作者:Mitchell
一 進(jìn)程:
- 指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序
- 每個(gè)進(jìn)程之間是相互獨(dú)立的
二 線程:
- 1個(gè)進(jìn)程要想執(zhí)行任務(wù)赛糟,必須得有線程(每個(gè)進(jìn)程至少要有1條線程)
- 1個(gè)進(jìn)程的所有任務(wù)都再線程中執(zhí)行
- 線程的內(nèi)部是串行的
三 多線程:
-
什么是多線程
- 1個(gè)進(jìn)程中可以開(kāi)啟多條線程滓玖,多條線程可以并行執(zhí)行不同的任務(wù)事扭。
- 多線程可以提高程序執(zhí)行的效率
- cpu同時(shí)只能運(yùn)行一條線程,只不過(guò)通過(guò)時(shí)間片輪轉(zhuǎn)显拜,也就是CPU快速在多個(gè)線程之間調(diào)度(切換)枢泰,如果CPU調(diào)度線程的時(shí)間足夠快笨蚁,就造成了多線程并發(fā)執(zhí)行的假象凶朗。
多個(gè)線程的缺點(diǎn):
-
多線程的優(yōu)點(diǎn):
- 能適當(dāng)提高程序的執(zhí)行效率
- 能適當(dāng)提高資源利用率(CPU,內(nèi)存利用率)
-
多線程的缺點(diǎn)
- 創(chuàng)建線程是有開(kāi)銷的瓷胧,iOS下主要成本包括:內(nèi)核數(shù)據(jù)結(jié)構(gòu)(大約1KB)、椗锓撸空間(子線程512KB搓萧、主線程1MB,也可以使用
-setStacjSize:
設(shè)置宛畦,但是必須是4K的倍數(shù)瘸洛,而且最小是16K),創(chuàng)建線程大約需要90毫秒的創(chuàng)建時(shí)間 - 如果開(kāi)啟大量的線程次和,會(huì)降低程序的性能
- CPU會(huì)在N多線程之間調(diào)度反肋,CPU會(huì)累死,消耗大量的CPU資源
- 每條線程被調(diào)度執(zhí)行的頻次被降低(線程的執(zhí)行效率下降)
- 創(chuàng)建線程是有開(kāi)銷的瓷胧,iOS下主要成本包括:內(nèi)核數(shù)據(jù)結(jié)構(gòu)(大約1KB)、椗锓撸空間(子線程512KB搓萧、主線程1MB,也可以使用
四 主線程:
- 什么是主線程
- 一個(gè) iOS 程序運(yùn)行后斯够,默認(rèn)會(huì)開(kāi)啟1條線程囚玫,稱為
“主線程”
或“UI線程”
- 一個(gè) iOS 程序運(yùn)行后斯够,默認(rèn)會(huì)開(kāi)啟1條線程囚玫,稱為
- 主線程的主要作用
- 顯示/刷新UI界面(如果在子線程中處理會(huì)有bug)
- 處理UI事件(點(diǎn)擊喧锦、滾動(dòng)读规、拖拽)
- 主線程的使用注意
- 不要將比較耗時(shí)的操作放到主線程中
-
如何獲取主線程
[NSThread mainThread];(number = 1,name = main)
-
[NSThread currentThread];
``` (如果是在當(dāng)前方法是被主線程執(zhí)行的抓督,那么拿到的就是主線程,否則是當(dāng)前線程)
+ 如何判斷當(dāng)前是否是在主線程中執(zhí)行的
- 判斷當(dāng)前是否在主線程中執(zhí)行的
[NSThread isMainThread]
---