iOS開發(fā)多線程的概念

1、了解多線程的思維

? ? 線程是用來執(zhí)行任務(wù)的,線程徹底執(zhí)行完任務(wù)A才能去執(zhí)行任務(wù)B。為了同時(shí)執(zhí)行兩個(gè)任務(wù),產(chǎn)生了多線程。

2、進(jìn)程(學(xué)習(xí)線程之前,必須要了解一下進(jìn)程)

? ? 1.進(jìn)程就是在操作系統(tǒng)中運(yùn)行的程序。專業(yè)點(diǎn)說,進(jìn)程是應(yīng)用程序的執(zhí)行實(shí)例

? ? 2.進(jìn)程不能執(zhí)行任務(wù)

? ? 3.進(jìn)程在運(yùn)行時(shí)創(chuàng)建的資源隨著進(jìn)程的終止而死亡

3、線程

? ? 1. 進(jìn)程本身是不能執(zhí)行任務(wù)的,進(jìn)程想要執(zhí)行任務(wù)必須的有線程,線程是進(jìn)程內(nèi)部的一個(gè)獨(dú)立的執(zhí)行單元,同時(shí)只能執(zhí)行一個(gè)任務(wù)。線程被分為兩種。主線程(用戶界面線程)和子線程(工作線程或后臺(tái)線程)。

? ? 2.線程執(zhí)行完畢就會(huì)被銷毀

? ? 3.主線程:當(dāng)應(yīng)用程序啟動(dòng)時(shí)自動(dòng)創(chuàng)建和啟動(dòng),通常用來處理用戶的輸入并響應(yīng)各種事件和消息,主線程的終止也意味著該程序的結(jié)束。

? ? 4.子線程:由主線程來創(chuàng)建,用來幫助主線程執(zhí)行程序的后臺(tái)處理任務(wù)。如果子線程A中又創(chuàng)建一個(gè)子線程B,在創(chuàng)建之后,這兩者就會(huì)是相互獨(dú)立的,多個(gè)子線程之間效果上可以同時(shí)執(zhí)行。

? ? 5.一個(gè)進(jìn)程可以有多個(gè)線程,并且所有線程都在該進(jìn)程的虛擬地址空間中,可以使用進(jìn)程的全局變量和系統(tǒng)資源。

? ? 6. 線程的五種狀態(tài):http://blog.csdn.net/peter_teng/article/details/10197785

4、多線程

? ? 1. 目前大多數(shù)的app,都需要連接服務(wù)器,而訪問服務(wù)器的速度可能快也可能很慢。如果一個(gè)app訪問服務(wù)器的操作沒有在子線程操作的話,在該app訪問服務(wù)器的過程中,該軟件是不能響應(yīng)用戶的操作的,只有該app訪問結(jié)束以后,app才能響應(yīng)用戶的操作,這就造成線程阻塞,也就是我們常見的卡頓現(xiàn)象。一條線程在同一時(shí)間內(nèi)只能執(zhí)行一個(gè)任務(wù),但是進(jìn)程可以有多條線程??梢蚤_啟多條線程來執(zhí)行不同的任務(wù),從而提高程序的執(zhí)行效率,避免線程阻塞。

? ? 2. 每個(gè)線程都可以設(shè)置優(yōu)先級(jí),操作系統(tǒng)會(huì)根據(jù)線程的優(yōu)先級(jí)來安排CPU的時(shí)間,優(yōu)先級(jí)高的線程,優(yōu)先調(diào)用的幾率會(huì)更大,同級(jí)的話,執(zhí)行的先后對(duì)線程執(zhí)行的先后有影響

? ? 3. 同一時(shí)間內(nèi),CPU只能處理一條線程,只有一條線程在工作。多線程并行執(zhí)行,其實(shí)就是各個(gè)線程不斷切換,因?yàn)閳?zhí)行切換的時(shí)間很快很快,就造成了同時(shí)執(zhí)行的假象,原理如下,比如A,B兩個(gè)線程;

? ? ? ? 1).A執(zhí)行到某一時(shí)間段要切換了,可A任務(wù)沒完成,系統(tǒng)就會(huì)把A當(dāng)前執(zhí)行的位置和數(shù)據(jù)以入棧的方式保存起來

? ? ? ? 2).然后B線程執(zhí)行,B執(zhí)行時(shí)間到了,它的位置狀態(tài)等也會(huì)被系統(tǒng)保存到B的棧中。

? ? ? ? 3).系統(tǒng)自動(dòng)找到A的棧,將A之前保存的數(shù)據(jù)恢復(fù),又可以從A之前斷開的狀態(tài)繼續(xù)執(zhí)行下去,如此循環(huán)

? ? ? ? 4). 系統(tǒng)每開一個(gè)線程都有比較大的開銷,若線程開的過多,不僅會(huì)占用大量內(nèi)存和讓城鄉(xiāng)變得更加復(fù)雜,而且會(huì)加重CPU的負(fù)擔(dān),這樣的軟件,會(huì)讓你省掉冬天買暖手寶的錢。

5、多線程的優(yōu)勢 ?

? ? 1. 提高程序執(zhí)行效率,避免線程阻塞造成的卡頓現(xiàn)象

? ? 2. 能適當(dāng)提高資源利用率(CPU,內(nèi)存)

6、多線程的不足

? ? 1. 開啟線程需要占用一定的內(nèi)存空間

? ? 2. 線程越多,CPU在線程調(diào)度上的開銷就越大

? ? 3. 程序設(shè)計(jì)更加復(fù)雜:比如線程之間的通信、多線程的數(shù)據(jù)共享

7、總結(jié)

? ? 1. 線程與進(jìn)程的關(guān)系

? ? ? ? 1). 線程是CPU執(zhí)行任務(wù)的基本單位,一個(gè)進(jìn)程能有多個(gè)線程,但同時(shí)只能執(zhí)行一個(gè)任務(wù)

? ? ? ? 2). 進(jìn)程就是運(yùn)行中的軟件,是動(dòng)態(tài)的

? ? ? ? 3). 一個(gè)操作系統(tǒng)可以對(duì)應(yīng)多個(gè)進(jìn)程,一個(gè)進(jìn)程可以有多條線程,但至少有一個(gè)線程

? ? ? ? 4). 同一個(gè)進(jìn)程內(nèi)的線程共享進(jìn)程里的資源

? ? 2. 主線程

? ? ? ? 1). 進(jìn)程一啟動(dòng)就自動(dòng)創(chuàng)建

? ? ? ? 2). 顯示和刷新UI界面

? ? ? ? 3). 處理UI事件

? ? 3. 子線程

? ? ? ? 1). 處理耗時(shí)的操作

? ? ? ? 2). 子線程不能用來刷新UI

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容