一 : 基本概念
1.0? 線程
線程是CPU調(diào)度的最小單元;
線程的作用:執(zhí)行app的代碼;
?一個(gè)進(jìn)程(App)至少有一個(gè)線程,這個(gè)進(jìn)程叫做主線程;
2.0? 進(jìn)程
在iOS 中 一個(gè)進(jìn)程就是一個(gè)正在運(yùn)行的一個(gè)應(yīng)用程序;? 比如 QQ.app? ,而且一個(gè)app只能有一個(gè)進(jìn)程 不像安卓支持多個(gè)進(jìn)程。
每一個(gè)進(jìn)度都是獨(dú)立的,每一個(gè)進(jìn)程均在專門且手保護(hù)的內(nèi)存空間內(nèi);
iOS中是一個(gè)非常封閉的系統(tǒng),每一個(gè)App(一個(gè)進(jìn)程)都有自己獨(dú)特的內(nèi)存和磁盤空間,別的App(進(jìn)程)是不允許訪問的(越獄不在討論范圍);
所以,在iPhone中下載了兩種音樂播放器,下載的音樂歌曲卻是不能共享的!跟安卓完全不同!?
進(jìn)程 是系統(tǒng)資源分配和調(diào)度的一個(gè)獨(dú)立單位,簡單的理解就是用來幫程序占據(jù)一定的存儲空間等的資源。進(jìn)程擁有自己獨(dú)立的位置空間,在沒有經(jīng)過進(jìn)程本身允許的情況下,其他進(jìn)程不能訪問改進(jìn)程的地址空間
在 iOS 中? UIApplication? 這個(gè) 類是 是 進(jìn)程相關(guān)的操作的。比如? 進(jìn)程A(程序A) 調(diào)用另外一個(gè)進(jìn)程B(程序B) 。? 打開iOS 系統(tǒng)的瀏覽器等 都是 這個(gè)類 來負(fù)責(zé)。
二者之間的區(qū)別:
線程是進(jìn)程的一部分,它是進(jìn)程中用來執(zhí)行任務(wù)的單位。一個(gè)進(jìn)程可以擁有多個(gè)線程,但最少要有一個(gè)主線程;每個(gè)線程不能獨(dú)立執(zhí)行,必須有一個(gè)父進(jìn)程;線程可以擁有自己的堆、棧、計(jì)數(shù)器和局部變量,一個(gè)進(jìn)程里的全部線程會共享該進(jìn)程的資源。線程是獨(dú)立運(yùn)行的,一個(gè)線程并不知道其它線程的存在,在線程運(yùn)行過程中隨時(shí)都有可能被掛起,方便其他線程運(yùn)行;線程是有優(yōu)先級的,當(dāng)然主線程的優(yōu)先級最高,在我們編程的時(shí)候也可以設(shè)置線程1執(zhí)行完畢后才執(zhí)行線程2。
進(jìn)程的并發(fā)性:處理器每次只執(zhí)行一個(gè)進(jìn)程,然后在多個(gè)進(jìn)程之間快速切換,依次來達(dá)到多個(gè)進(jìn)程在單個(gè)處理器上同時(shí)執(zhí)行的效果;
進(jìn)程的并行性:同一時(shí)刻,處理器同時(shí)執(zhí)行多個(gè)進(jìn)程;
多線程與多進(jìn)程的對比:
1.進(jìn)程之間不能共享內(nèi)存,線程可以
同一個(gè)進(jìn)程中的線程共享了改進(jìn)程的很多資源,包括:進(jìn)程虛擬空間、進(jìn)程代碼段、進(jìn)程共有數(shù)據(jù)等,因此線程之間更容易相互通信,多線程的運(yùn)行效率遠(yuǎn)遠(yuǎn)高于多進(jìn)程;
2.系統(tǒng)創(chuàng)建進(jìn)程的時(shí)候要為其分配系統(tǒng)資源,而創(chuàng)建線程則只需要很小一部分,因此多線程比多進(jìn)程來的更加容易;
3.多線程可以充分利用處理器(雙核或者多核),但是當(dāng)線程數(shù)量達(dá)到上限的時(shí)候,性能就不在提升了;
4.多線程的進(jìn)程中一個(gè)線程崩潰了就會導(dǎo)致進(jìn)程崩潰,如果是主線程崩潰會導(dǎo)致程序崩潰;
但是多進(jìn)程中子進(jìn)程崩潰了不會影響到其它進(jìn)程,程序穩(wěn)定性更好;
5.多線程需要控制線程之間的同步,而多進(jìn)程則需要控制和主進(jìn)程之間的交互;
6.如果兩個(gè)進(jìn)程之間要相互傳輸大量的數(shù)據(jù),會相當(dāng)影響性能,多進(jìn)程適合小數(shù)據(jù)量傳輸,密集運(yùn)算;
參考博客:http://blog.csdn.net/xgcyangguang/article/details/51236181