一滥沫、進(jìn)程
- 進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序侣集,例如:我們打開QQ是一個(gè)進(jìn)程,打開Xcode也是一個(gè)進(jìn)程
- 每個(gè)進(jìn)程之間是
相互獨(dú)立
的兰绣,每個(gè)進(jìn)程均運(yùn)行在其專用且受保護(hù)的內(nèi)存空間內(nèi)
二世分、線程
- 線程是進(jìn)程的基本執(zhí)行單元,
1個(gè)進(jìn)程要想執(zhí)行任務(wù)缀辩,必須得有線程
(每1個(gè)進(jìn)程至少要有1條線程) - 一個(gè)進(jìn)程(程序)的所有任務(wù)都在線程中執(zhí)行
- 注意:1個(gè)線程中任務(wù)的執(zhí)行是串行的
三臭埋、多線程
什么是多線程?
- 1個(gè)進(jìn)程中可以開啟多條線程臀玄,多條線程可以并行(同時(shí))執(zhí)行不同的任務(wù)
多線程的原理
- 同一時(shí)間瓢阴,CPU只能處理1條線程,只有1條線程在工作(執(zhí)行)
- 多線程并發(fā)(同時(shí))執(zhí)行健无,其實(shí)是CPU快速地在多條線程之間調(diào)度(切換)
- 如果CPU調(diào)度線程的時(shí)間足夠快荣恐,就造成了多線程并發(fā)執(zhí)行的假象
思考:如果線程非常非常多,會(huì)發(fā)生什么情況累贤?
- 多條線程會(huì)再CPU來回切換叠穆,會(huì)銷毀大量的CPU資源
- 每條線程被調(diào)度執(zhí)行的頻度會(huì)變小,線程的執(zhí)行效率會(huì)降低伴隨著
多線程的優(yōu)缺點(diǎn)
-
優(yōu)點(diǎn):
- 能適當(dāng)提高程序的執(zhí)行效率
- 能適當(dāng)提高資源利用率(CPU臼膏、內(nèi)存利用率)
-
缺點(diǎn)
- 創(chuàng)建線程是有開銷的硼被,線程越多,CPU在調(diào)度線程上的開銷就越大
- 如果開啟大量的線程渗磅,會(huì)降低程序的性能
- 程序設(shè)計(jì)更加復(fù)雜:比如線程之間的通信祷嘶、多線程的數(shù)據(jù)共享
四屎媳、主線程
- 什么是主線程
- 一個(gè)iOS程序運(yùn)行后,默認(rèn)會(huì)開啟1條線程论巍,稱為
“主線程”或“UI線程”
- 主線程的主要作用
- 顯示\刷新UI界面
- 處理UI事件
- 主線程的使用注意
- 別將比較耗時(shí)的操作放到主線程中
- 一般都是在子線程(后臺線程烛谊、非主線程)處理耗時(shí)操作后回到主線程中刷新UI界面
- 耗時(shí)操作會(huì)卡住主線程,嚴(yán)重影響UI的流暢度嘉汰,給用戶一種“卡”的壞體驗(yàn)
五丹禀、iOS中多線程的實(shí)現(xiàn)方案
六、總結(jié):
線程與進(jìn)程的區(qū)別和聯(lián)系?
一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程:2
進(jìn)程:一個(gè)程序的一次運(yùn)行,在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享一塊內(nèi)存線程:線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元鞋怀。
聯(lián)系:線程是進(jìn)程的基本組成單位
-
區(qū)別:
- 1.調(diào)度:線程作為調(diào)度和分配的基本單位,進(jìn)程作為擁有資源的基本單位
- 2.并發(fā)性:不僅進(jìn)程之間可以并發(fā)執(zhí)行,同一個(gè)進(jìn)程的多個(gè)線程之間也可并發(fā)執(zhí)行
3.擁有資源:進(jìn)程是擁有資源的一個(gè)獨(dú)立單位,線程不擁有系統(tǒng)資源,但可以訪問隸屬于進(jìn)程的資源.
4.系統(tǒng)開銷:在創(chuàng)建或撤消進(jìn)程時(shí),由于系統(tǒng)都要為之分配和回收資源,導(dǎo)致系統(tǒng)的開銷明顯大于創(chuàng)建
或撤消線程時(shí)的開銷双泪。
多線程的安全隱患 :
-
資源共享
- 1塊資源可能會(huì)被多個(gè)線程共享,也就是
多個(gè)線程可能會(huì)訪問同一塊資源
- 比如多個(gè)線程訪問同一個(gè)對象密似、同一個(gè)變量焙矛、同一個(gè)文件
- 1塊資源可能會(huì)被多個(gè)線程共享,也就是
當(dāng)多個(gè)線程訪問同一塊資源時(shí),很容易
引發(fā)數(shù)據(jù)錯(cuò)亂和數(shù)據(jù)安全問題
多線程同步和異步的區(qū)別残腌?村斟,iOS 中如何實(shí)現(xiàn)多線程的同步?
同步 : 是指一個(gè)線程要等待上一個(gè)線程執(zhí)行完之后才開始執(zhí)行當(dāng)前的線程
異步:線程間沒有先后,一個(gè)線程不用等某一個(gè)線程執(zhí)行后才可以執(zhí)行
-
多線程的同步
實(shí)現(xiàn)多種方式- 關(guān)鍵字@synchronized()
- NSOperationQueue:maxcurrentcount
- NSConditionLock