1、基本概念
01 進(jìn)程:進(jìn)程就是一個(gè)正在執(zhí)行的應(yīng)用程序氏淑。多個(gè)進(jìn)程之間相互獨(dú)立勃蜘,而且有自己專用而且安全的內(nèi)存空間
02 線程
2-1基本概念:一個(gè)進(jìn)程想要執(zhí)行任務(wù)必須要有線程(每一個(gè)進(jìn)程至少要有一條線程),線程是進(jìn)程的基本執(zhí)行單元假残,一個(gè)進(jìn)程的任務(wù)都是在線程中執(zhí)行的
2-2 線程的串行:線程中的任務(wù)缭贡,按照順序一條一條執(zhí)行
03 多線程
3-1 基本概念:一個(gè)進(jìn)程開啟多條線程,各條線程線程同時(shí)處理各自任務(wù)
3-2 線程的并行:多個(gè)線程同時(shí)(并發(fā))執(zhí)行任務(wù)辉懒。
3-3 線程并發(fā)執(zhí)行的原理:同一時(shí)間阳惹,cup只能執(zhí)行一條線程的任務(wù),所謂的并發(fā)執(zhí)行眶俩,其實(shí)是cup快速的在多個(gè)線程之間進(jìn)行調(diào)度莹汤,造成了多線程并發(fā)執(zhí)行任務(wù)的假象
3-4多線程優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
1)提高執(zhí)行效率
2)提高資源利用率
缺點(diǎn)
1)開啟線程需要消耗內(nèi)存空間,如果開啟的線程過多的話颠印,會(huì)消耗大量的cpu的內(nèi)存纲岭,降低程序的性能
2)會(huì)增加cpu在多個(gè)線程之間調(diào)度的開銷抹竹。
3)程序設(shè)計(jì)更加復(fù)雜,比如線程之間的通信止潮,線程之間的資源共享
04 多線程在iOS中的應(yīng)用
4-1 主線程:
1)一個(gè)iOS應(yīng)用程序默認(rèn)會(huì)有一條線程窃判,稱為主線程或者ui線程
2)用來刷新UI操作,處理UI事件
4-2 使用注意
1)不要把過度耗時(shí)操作放在主線程喇闸,會(huì)阻塞線程兢孝,造成界面卡住
2)UI刷新操作一定要放在主線程中執(zhí)行
5、線程安全
前提:多個(gè)線程仅偎,同時(shí)訪問同一塊資源,會(huì)發(fā)生數(shù)據(jù)安全問題
解決方法:加互斥鎖
相關(guān)代碼:@synchronized(self){}
專業(yè)術(shù)語:線程同步
原子屬性和非原子屬性:原子屬性對(duì)setter方法進(jìn)行枷鎖
NSThread??? NSOperation? GCD的比較
NSThread 每一個(gè)thread對(duì)應(yīng)一個(gè)線程真正最原始的線程
優(yōu)點(diǎn):是最輕量級(jí)的線程管理雳殊,用起來簡單
缺點(diǎn):需要手動(dòng)管理線程活動(dòng)橘沥,比如生命周期、線程同步夯秃、睡眠等
NSOperation
優(yōu)點(diǎn):自動(dòng)線程管理座咆,是對(duì)GCD的封裝,有自己的抽象類仓洼,是面向?qū)ο蟮木€程管理
缺點(diǎn):只能實(shí)現(xiàn)它或者使用它定義好的兩個(gè)子類,NSInvocationOperation和NSBlockOperation
CGD 是蘋果推薦的多線程使用方法
優(yōu)點(diǎn):充分利用設(shè)備的多核(自動(dòng)的)介陶,最高效,避免開發(fā)陷阱
缺點(diǎn):基于C語言的開發(fā)色建,用起來相對(duì)比較復(fù)雜
小結(jié):簡單而且安全的選擇NSOperation實(shí)現(xiàn)多線程即可
如果要處理大量的并發(fā)數(shù)據(jù)哺呜,又追求性能效率的選擇GCD
NSThread用一些簡單的方法,比如打印當(dāng)前線程箕戳,線程睡眠等