進(jìn)程
- 1.基本概念
進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序 - 2.進(jìn)程的特點(diǎn)
- a. 每個(gè)進(jìn)程之間都是獨(dú)立的
- b.每個(gè)進(jìn)程都云翔在器專用且受保護(hù)的內(nèi)存空間中
比如:同時(shí)開啟QQ和Xcode時(shí),系統(tǒng)就會(huì)分別啟動(dòng)兩個(gè)進(jìn)程,并且這兩個(gè)進(jìn)程之間是不能相互訪問的 - c.一個(gè)應(yīng)用,可以開啟多個(gè)進(jìn)程
比如:同時(shí)打開兩三個(gè)QQ - d.一個(gè)進(jìn)程要想執(zhí)行任務(wù),必須要有線程,一個(gè)進(jìn)程里,至少有一個(gè)線程
線程
1.基本概念
線程是進(jìn)程的基本執(zhí)行單元,一個(gè)進(jìn)程(應(yīng)用)內(nèi)的所有任務(wù),都是在線程中執(zhí)行的
比如:用酷狗播放音樂,用迅雷下載視頻,都是在線程內(nèi)執(zhí)行的-
2.線程的特點(diǎn)
- a.一個(gè)線程內(nèi)的任務(wù),都是串行執(zhí)行的(線程串行)
- b.同一時(shí)間內(nèi),1個(gè)線程只能執(zhí)行1個(gè)任務(wù)
- c.如果要在一個(gè)線程中,執(zhí)行多個(gè)任務(wù),那么只能按順序,一個(gè)一個(gè)的執(zhí)行,也可以認(rèn)為線程是進(jìn)程中的一條執(zhí)行路徑
多線程
1.基本概念
一個(gè)進(jìn)程可以開啟多條線程,每條線程可以同時(shí)(并發(fā))的執(zhí)行不同的任務(wù)
在wifi環(huán)境下,可以開啟6條線程以內(nèi) 在2G,3G,4G網(wǎng)絡(luò)的狀態(tài)下,只可以開啟2-3條線程以內(nèi)
-
2.多線程的特點(diǎn)
- 優(yōu)點(diǎn):
1.能適當(dāng)?shù)奶岣叱绦虻膱?zhí)行效率
2.能夠適當(dāng)?shù)奶岣哔Y源的利用率(比如CPU唬滑、內(nèi)存的利用率)
3.同一個(gè)進(jìn)程中的多個(gè)線程之間是并行的(即同時(shí)執(zhí)行)
比如:同時(shí)開啟三個(gè)線程,分別下載三個(gè)文件 - 缺點(diǎn):
1.開啟線程的話,需要占用一定的內(nèi)存空間(默認(rèn)情況下,主線程占用1M,子線程占用512KB),如果開啟大量的線程,會(huì)占用大量的內(nèi)存空間,降低程序的性能
2.線程越多,CPU在調(diào)度線程上的開銷就越大,,iOS下的開銷成本包括"內(nèi)核數(shù)據(jù)結(jié)構(gòu)"和"椌グ牛空間",而且創(chuàng)建線程需要消耗大概"90毫秒的時(shí)間"
3.程序的設(shè)計(jì)會(huì)變得更加的復(fù)雜
比如:線程之間的通訊,多個(gè)線程數(shù)據(jù)的共享
- 優(yōu)點(diǎn):
3.多線程并發(fā)執(zhí)行的原理
1.在同一個(gè)時(shí)間內(nèi),CPU只能處理一條線程,也就是說(shuō),只有一條線程是在工作(執(zhí)行)中
2.多線程的并發(fā)(同時(shí))執(zhí)行,其實(shí)就是CPU快速的在多個(gè)線程之間進(jìn)行調(diào)度(即切換),試想,如果CPU調(diào)度線程的時(shí)間足夠的快,這樣,就會(huì)造成多個(gè)線程并發(fā)(同時(shí))執(zhí)行的假象問題:為什么當(dāng)一個(gè)進(jìn)程中的線程過(guò)多的時(shí)候,返回程序的運(yùn)行效率會(huì)降低?
答:
1.因?yàn)殚_啟一個(gè)線程,會(huì)占用一定的內(nèi)存空間,當(dāng)開啟的線程較多的時(shí)候,會(huì)占用大量的內(nèi)存資源
2.CPU在不同的線程之間進(jìn)行調(diào)度,是會(huì)消耗CPU資源的,當(dāng)CPU在N多個(gè)線程間進(jìn)行調(diào)度時(shí),CPU的資源會(huì)被大量的占用,這樣每條線程被調(diào)度的頻率就會(huì)降低,這樣就導(dǎo)致了線程的執(zhí)行效率降低
多線程在iOS開發(fā)中的應(yīng)用
1.主線程
當(dāng)一個(gè)iOS程序運(yùn)行后,默認(rèn)就會(huì)開啟一條線程,這個(gè)線程就被稱為主線程"或者"UI線程"2.主線程的作用
刷新顯示UI(所有跟控件,界面有關(guān)的都叫刷新UI)
處理UI事件(比如:點(diǎn)擊、滾動(dòng)汁果、拖拽事件)3.主線程的使用注意點(diǎn)
1.不能將耗時(shí)的操作放到主線程中去處理,這樣會(huì)卡住主線程,嚴(yán)重影響UI的流暢度,會(huì)給用戶一種卡的體驗(yàn)
2.與UI相關(guān)的刷新操作,都必須放到主線程中進(jìn)行處理-
注意:
1.線程中的任務(wù)不一定只有一個(gè),只有當(dāng)線程中的所有的任務(wù)都執(zhí)行完畢后,線程才會(huì)被釋放2.線程也是分優(yōu)先級(jí)的(如何設(shè)置線程的優(yōu)先級(jí)以及線程的名字,會(huì)在NSThread中介紹)
1.調(diào)度優(yōu)先級(jí)的取值范圍是0.0 ~ 1.0,默認(rèn)0.5,值越大墅茉,優(yōu)先級(jí)越高
2.線程的優(yōu)先級(jí)高,只是CPU調(diào)度的頻率高,但是并不一定是最先完成任務(wù)的
進(jìn)程/線程的特點(diǎn)與區(qū)別?
1.地址空間和其它資源:進(jìn)程間相互獨(dú)立,同一進(jìn)程的各線程間共享這一進(jìn)程內(nèi)的所有資源。某進(jìn)程內(nèi)的線程在其它進(jìn)程不可見良拼。
2.通信:進(jìn)程間通信IPC(Inter-Process Communication),線程間可以直接讀寫進(jìn)程數(shù)據(jù)段(如全局變量)來(lái)進(jìn)行通信——需要進(jìn)程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性战得。
3.調(diào)度和切換:線程上下文切換比進(jìn)程上下文切換要快得多。
4.在多線程OS(Operating System)中,進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體