一陪白、進(jìn)程與線程
1颈走、什么是進(jìn)程?
- 進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個應(yīng)用程序咱士,它是系統(tǒng)分配資源的基本單元立由。
- 每個進(jìn)程之間是獨(dú)立的轧钓,均運(yùn)行在其專用且受保護(hù)的內(nèi)存空間內(nèi),擁有獨(dú)立運(yùn)行所需的全部資源锐膜。
比如同時打開QQ毕箍、Xcode,系統(tǒng)就會分別啟動2個進(jìn)程枣耀,通過“活動監(jiān)視器”可以查看Mac系統(tǒng)中所開啟的進(jìn)程霉晕。
2、什么是線程捞奕?
- 線程是CPU調(diào)度的最小單元牺堰,也是進(jìn)程的基本執(zhí)行單元,進(jìn)程(程序)的所有任務(wù)都在線程中執(zhí)行颅围,線程是進(jìn)程中的一個實體伟葫。
- 一個進(jìn)程想要執(zhí)行任務(wù),必須至少有一條線程院促。應(yīng)用程序啟動的時候筏养,系統(tǒng)會默認(rèn)開啟一條線程,也就是主線程常拓。
- 同一個進(jìn)程內(nèi)的線程共享進(jìn)程資源渐溶。
比如使用酷狗播放音樂、使用迅雷下載電影弄抬,都需要在線程中執(zhí)行
3茎辐、線程的串行
一個線程中任務(wù)的執(zhí)行是串行的,如果要在一個線程中執(zhí)行多個任務(wù)掂恕,那么只能一個一個地按順序執(zhí)行這些任務(wù)拖陆,也就是說,在同一時間內(nèi)懊亡,一個線程只能執(zhí)行一個任務(wù)依啰。
比如在一個線程中下載3個文件(分別是文件A、文件B店枣、文件C)
二速警、多進(jìn)程與多線程
1、多進(jìn)程
打開mac的活動監(jiān)視器鸯两,可以看到很多個進(jìn)程同時運(yùn)行
- 進(jìn)程是程序在計算機(jī)上的一次執(zhí)行活動坏瞄。當(dāng)你運(yùn)行一個程序,你就啟動了一個進(jìn)程甩卓。顯然鸠匀,程序是死的(靜態(tài)的),進(jìn)程是活的(動態(tài)的)逾柿。
- 進(jìn)程可以分為系統(tǒng)進(jìn)程和用戶進(jìn)程缀棍。凡是用于完成操作系統(tǒng)的各種功能的進(jìn)程就是系統(tǒng)進(jìn)程宅此,它們就是處于運(yùn)行狀態(tài)下的操作系統(tǒng)本身;所有由用戶啟動的進(jìn)程都是用戶進(jìn)程爬范。
- 進(jìn)程又被細(xì)化為線程父腕,也就是一個進(jìn)程下有多個能獨(dú)立運(yùn)行的更小的單元。在同一個時間里青瀑,一個計算機(jī)系統(tǒng)中如果允許兩個或兩個以上的進(jìn)程處于運(yùn)行狀態(tài)璧亮,這便是多進(jìn)程。
2斥难、多線程
一個進(jìn)程中可以開啟多條線程枝嘶,每條線程可以并行(同時)執(zhí)行不同的任務(wù),多線程技術(shù)可以提高程序的執(zhí)行效率(進(jìn)程→車間哑诊,線程→車間工人)
比如同時開啟3條線程分別下載3個文件(分別是文件A群扶、文件B、文件C)
3镀裤、多線程的原理
同一時間竞阐,CPU只能處理一條線程,只有一條線程在工作(執(zhí)行)暑劝,多線程并發(fā)(同時)執(zhí)行骆莹,其實是CPU快速地在多條線程之間調(diào)度(切換),如果CPU調(diào)度線程的時間足夠快担猛,就造成了多線程并發(fā)執(zhí)行的假象幕垦。
4、思考:如果線程非常非常多毁习,會發(fā)生什么情況智嚷?
答:CPU會在N多線程之間調(diào)度卖丸,消耗大量的CPU資源纺且,每條線程被調(diào)度執(zhí)行的頻次會降低(線程的執(zhí)行效率降低)
5、多線程的優(yōu)點(diǎn)
- 能適當(dāng)提高程序的執(zhí)行效率
- 能適當(dāng)提高資源利用率(CPU稍浆、內(nèi)存利用率)
6载碌、多線程的缺點(diǎn)
- 開啟線程需要占用一定的內(nèi)存空間(默認(rèn)情況下,主線程占用1M衅枫,子線程占用512KB)嫁艇,如果開啟大量的線程,會占用大量的內(nèi)存空間弦撩,降低程序的性能
- 線程越多步咪,CPU在調(diào)度線程上的開銷就越大
- 程序設(shè)計更加復(fù)雜:比如線程之間的通信、多線程的數(shù)據(jù)共享
7益楼、多線程在iOS開發(fā)中的應(yīng)用
主線程:一個iOS程序運(yùn)行后猾漫,默認(rèn)會開啟一條線程点晴,稱為“主線程”或“UI線程”
主要作用:顯示\刷新UI界面,處理UI事件(比如點(diǎn)擊事件悯周、滾動事件粒督、拖拽事件等)
使用注意:別將比較耗時的操作放到主線程中。耗時操作會卡住主線程禽翼,嚴(yán)重影響UI的流暢度屠橄,給用戶一種“卡”的壞體驗