概述:在iOS 中每一個運(yùn)行中的應(yīng)用都有唯一的一個進(jìn)程,進(jìn)程是運(yùn)行在內(nèi)存中的齐佳,每一個進(jìn)程中都可以有多個線程用于處理不同的任務(wù),其中比較特殊的一條線程叫做主線程也叫做UI線程(iOS中所有的UI更新相關(guān)的操作蘋果都建議最好在主線程中進(jìn)行)
1.0 1個線程中任務(wù)的執(zhí)行是串行的
1個線程中任務(wù)的執(zhí)行是串行的债沮,一條線程相當(dāng)于一條單行道公路炼吴,每一個任務(wù)都相當(dāng)于一輛汽車,任務(wù)A疫衩,B硅蹦,C 按順序串行執(zhí)行,相當(dāng)于汽車 A 先走過這段路,然后B才開始走童芹,B走完 C才開始走涮瞻,如下圖
2.0 多線程技術(shù)由來
電腦最先開始的時候CPU只有一個,同一時間內(nèi)一個1個CPU只能處理1條線程(當(dāng)然現(xiàn)在的4核8線程之類的東西另算)假褪,隨著CPU運(yùn)算能力的不斷增強(qiáng)署咽, 為了提高CPU的利用率,加上人們同執(zhí)行多個任務(wù)的需求生音,多線程技術(shù)應(yīng)運(yùn)而生宁否。
一個CPU 同一時間只能執(zhí)行一個線程的任務(wù),而我們的線程可能有幾十幾百個搀愧,CPU是如何做到讓這么多個線程 看起來是同時執(zhí)行的呢隔缀?
其實(shí)CPU的多線程運(yùn)行原理類似于同時做多件事情的人類术唬,只不過他在各個事情之間切換的速度快的超乎想象而已,當(dāng)CPU在線程之間切換的速度足夠快的時候台谊,就造成了多線程并發(fā)執(zhí)行的假象。如下圖 CPU 按照 1 到7的順序進(jìn)行切換執(zhí)行
3.0 多線程優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
1.能適當(dāng)提高程序的執(zhí)行效率
2.能適當(dāng)提高資源的利用率(CPU譬挚、內(nèi)存利用率)
缺點(diǎn)
1.創(chuàng)建線程是有開銷的青伤,iOS下主要成本包括:內(nèi)核數(shù)據(jù)結(jié)構(gòu)(大約1kb)、椗故荩空間(子線程512KB狠角、主線程1MB,也可以用 - setStackSize:設(shè)置蚪腋,但是必須是4k的倍數(shù)丰歌,而且最小是16KB),創(chuàng)建線程大約需要90毫秒的創(chuàng)建時間
2.CPU線程切換其實(shí)也是小號算力資源的屉凯,所以線程不是越多越好立帖。
3.如果開啟大量的線程,會降低程序的性能
4.程序設(shè)計更加復(fù)雜:比如線程之間的通信悠砚、多線程的數(shù)據(jù)共享
4.0 什么是主線程
iOS中每一個進(jìn)程都會默認(rèn)創(chuàng)建一條主線程又叫UI線程晓勇,
作用
顯示\刷新UI界面
處理UI事件(比如 點(diǎn)擊事件、滾動事件灌旧、拖拽事件等)
使用注意
別將比較耗時的操作放到主線程中绑咱,否則會阻塞主線程,導(dǎo)致UI操作卡頓現(xiàn)象枢泰,帶來極其不好的用戶體驗(yàn)如下圖
在iOS 中有以下四種主要的方式 來達(dá)到多線程的效果
其中 pthread 和 NSThread 算是真正的多線程技術(shù)描融,NSOperation 是對 GCD的再封裝 ,GCD 和NSOperation 是通過對隊列的操作 并發(fā)來達(dá)到多線程的效果衡蚂,這個之后會講到窿克。
注:多線程目的:將耗時操作放在后臺,不阻塞UI線程! 在多線程開發(fā)中,不要相信一次的運(yùn)行結(jié)果!!