單線程和多線程的簡單理解

線程:簡單的說就是處理事務(wù)的任務(wù)鏈,當(dāng)只有一條鏈熄赡,所有的事情都在這一條鏈上執(zhí)行時(shí)姜挺,那就是單線程,單線程有很多缺點(diǎn)彼硫,就是當(dāng)執(zhí)行某個(gè)耗時(shí)或者不能立即完成的任務(wù)時(shí)炊豪,比如:網(wǎng)絡(luò)通訊、復(fù)雜運(yùn)動(dòng)拧篮,該線程就會暫時(shí)停止對其他任務(wù)的響應(yīng)和處理词渤,造成的視覺效果就是程序的“假死”,也就是應(yīng)用程序被卡在那里無法繼續(xù)執(zhí)行串绩,因此在多數(shù)情況下缺虐,單線程的應(yīng)用很少。而當(dāng)有多條鏈時(shí)赏参,那就是多線程了志笼,當(dāng)然并不是說多條線并行,而是說有一條主線程把篓,處理整個(gè)程序任務(wù)的主方向的鏈纫溃,而其鏈上又有許許多多的分支,就像樹枝那樣韧掩,這樣紊浩,既有了主線程去處理那些主要任務(wù),又有了那些細(xì)小線程去處理耗時(shí)費(fèi)力任務(wù),從而讓界面看起來更加流暢坊谁。iOS平臺對多線程的支持iOS平臺提供了非常優(yōu)秀的多線程支持费彼,程序可以通過非常簡單的方式來啟動(dòng)多線程,iOS平臺不僅提供了NSThread類來創(chuàng)建多線程口芍,還提供了GCD方式來簡化多線程編程箍铲,提供了NSOperation和NSOperationQueue支持多線程編程。

線程和進(jìn)程幾乎所有的操作系統(tǒng)都支持同時(shí)運(yùn)行多個(gè)任務(wù)鬓椭,一個(gè)任務(wù)通常就是一個(gè)程序颠猴,每個(gè)運(yùn)行中的程序就是一個(gè)進(jìn)程。? 當(dāng)一個(gè)程序運(yùn)行時(shí)小染,內(nèi)部可能包含了多個(gè)順序執(zhí)行流翘瓮,每個(gè)順序執(zhí)行流就是一個(gè)線程。

幾乎所有的操作系統(tǒng)都支持進(jìn)程的概念裤翩,所有運(yùn)行中的任務(wù)通常對應(yīng)一個(gè)進(jìn)程(Process)资盅。當(dāng)一個(gè)程序進(jìn)入內(nèi)存,運(yùn)行后踊赠,即變成一個(gè)進(jìn)程呵扛。

**進(jìn)程是處于運(yùn)行過程中的程序,并且具有一定的獨(dú)立功能臼疫,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位**择份。

一般而言,進(jìn)程包含如下3個(gè)特征:??

- 獨(dú)立性:進(jìn)程是系統(tǒng)中獨(dú)立存在的實(shí)體烫堤,它可以擁有自己獨(dú)立的資源荣赶,每一個(gè)進(jìn)程都擁有自己私有的地址空間。在沒有經(jīng)過進(jìn)程本身允許的情況下鸽斟,一個(gè)用戶進(jìn)程不可以直接就訪問其他進(jìn)程的地址空間拔创。?

- 動(dòng)態(tài)性:進(jìn)程與程序的區(qū)別在于,程序只是一個(gè)靜態(tài)的指令集合富蓄,而進(jìn)程是一個(gè)正在系統(tǒng)中活動(dòng)的指令集合剩燥。在進(jìn)程中加入了時(shí)間的概念。進(jìn)程具有自己的生命周期和各種不同的狀態(tài)立倍,這些概念在程序中都是不具備的灭红。 ?

- 并發(fā)性:多個(gè)進(jìn)程可以在單個(gè)處理器上并發(fā)執(zhí)行,多個(gè)進(jìn)程之間不會互相影響口注。并發(fā)性(concurrency)和并行性(parallel)是兩個(gè)不同的概念变擒。并行指在同一時(shí)刻,有多條指令在多個(gè)處理器上同時(shí)執(zhí)行寝志;并發(fā)指在同一時(shí)刻娇斑,只能有一條指令執(zhí)行策添,但多個(gè)進(jìn)程指令被快速輪換執(zhí)行(納秒級),使得在宏觀上具有多個(gè)進(jìn)程同時(shí)執(zhí)行的效果毫缆。??

大部分操作系統(tǒng)都支持多進(jìn)程并發(fā)運(yùn)行唯竹,現(xiàn)代的操作系統(tǒng)幾乎都支持同時(shí)運(yùn)行多個(gè)任務(wù)對于一個(gè)CPU而言,它在某個(gè)時(shí)間點(diǎn)上只能執(zhí)行一個(gè)程序苦丁,也就是說浸颓,只能運(yùn)行一個(gè)進(jìn)程,CPU不斷地在這些進(jìn)程之間輪換執(zhí)行芬骄。為什么感覺不到任何中斷現(xiàn)象猾愿?這是因?yàn)镃PU的執(zhí)行速度相對人類的感覺而言是在是太快了。當(dāng)然账阻,如果啟動(dòng)的程序足夠多,依然可以感覺到程序的運(yùn)行速度下降泽本。所以雖然CPU在多個(gè)進(jìn)程之間輪換執(zhí)行淘太,但感覺到(宏觀上)好像多個(gè)進(jìn)程在同時(shí)執(zhí)行。現(xiàn)代的操作系統(tǒng)都支持多進(jìn)程的并發(fā)(輪換執(zhí)行)规丽,但在具體的實(shí)現(xiàn)細(xì)節(jié)上可能因?yàn)橛布筒僮飨到y(tǒng)的不同而采用不同的策略蒲牧。目前操作系統(tǒng)大多采用效率更高的搶占式多任務(wù)策略,例如WindowsNT赌莺、windows2000以及UNIX/Linux等操作系統(tǒng)冰抢。

多線程則擴(kuò)展了多進(jìn)程的概念,使得同一個(gè)進(jìn)程可以同時(shí)并發(fā)(輪換執(zhí)行)處理多個(gè)任務(wù)艘狭。線程(Thread)也被稱作輕量級進(jìn)程(LightweightProcess)挎扰,線程是進(jìn)程的執(zhí)行單元。就像進(jìn)程在操作系統(tǒng)中的地位一樣巢音,線程在進(jìn)程中是獨(dú)立的遵倦、并發(fā)的執(zhí)行流。

進(jìn)程操作系統(tǒng)--線程進(jìn)程當(dāng)進(jìn)出被初始化后官撼,主線程就被創(chuàng)建了對于應(yīng)用程序而言梧躺,通常至少有一個(gè)主線程,可以在該進(jìn)程內(nèi)創(chuàng)建多條順序執(zhí)行流傲绣,這些順序執(zhí)行流就是線程掠哥,每條線程也是相互獨(dú)立的;線程是進(jìn)程的的組成部分秃诵,一個(gè)進(jìn)程可以擁有多個(gè)線程续搀,一個(gè)線程必須有一個(gè)父進(jìn)程,線程可以擁有自己的堆棧顷链、自己的程序計(jì)數(shù)器和自己的局部變量目代,但是不再擁有系統(tǒng)資源屈梁,它與父進(jìn)程的其他線程共享該進(jìn)程所擁有的全部資源。因?yàn)槎鄠€(gè)線程共享父進(jìn)程里的全部資源榛了,因此編程更加方便在讶;但必須更加小心,必須確保線程不會妨礙同一進(jìn)程里的其他線程霜大。??

??? 線程可以完成一定的任務(wù)构哺,可與其他線程共享父進(jìn)程中的共享變量及部分環(huán)境,相互之間協(xié)同來完成進(jìn)程所要完成的任務(wù)战坤;??

??? 線程是獨(dú)立運(yùn)行的曙强,它并不知道進(jìn)程中是否還有其他線程存在。線程的執(zhí)行是搶占式的途茫,也就是說碟嘴,當(dāng)前運(yùn)行的線程在任何時(shí)候都可能被掛起,以便另一個(gè)線程可以運(yùn)行囊卜;??

??? 一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程娜扇,同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行;??

??? 從邏輯角度看栅组,多線程存在于一個(gè)運(yùn)行中的應(yīng)用程序中雀瓢,讓一個(gè)運(yùn)行中的應(yīng)用程序中可以有多個(gè)執(zhí)行部分同時(shí)執(zhí)行(宏觀上),但操作系統(tǒng)無須將多個(gè)線程看作多個(gè)獨(dú)立的應(yīng)用玉掸,對多線程實(shí)現(xiàn)調(diào)度和管理以及資源分配刃麸。線程的調(diào)度和管理由進(jìn)程本身負(fù)責(zé)完成。

簡而言之司浪,一個(gè)程序運(yùn)行后至少有一個(gè)進(jìn)程泊业,一個(gè)進(jìn)程里至少要包含一個(gè)線程(即主線程),可以包含多個(gè)線程断傲。操作系統(tǒng)可以同時(shí)執(zhí)行多個(gè)任務(wù)脱吱,每個(gè)任務(wù)就是進(jìn)程;進(jìn)程可以同時(shí)執(zhí)行多個(gè)任務(wù)认罩,每個(gè)任務(wù)就是線程箱蝠。多線程線程在運(yùn)行中的程序中是獨(dú)立的、并發(fā)的執(zhí)行流垦垂,與分隔的進(jìn)程相比宦搬,進(jìn)程中的線程之間的隔離程序要小,因?yàn)樗鼈児蚕韮?nèi)存劫拗、文件句柄和其它每個(gè)進(jìn)程應(yīng)有的狀態(tài)间校。? 因?yàn)榫€程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高页慷。

進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元憔足,而多個(gè)線程共享內(nèi)存胁附,從而極大地提高了程序的運(yùn)行效率。線程比進(jìn)程具有更高的性能:這是因?yàn)橥粋€(gè)進(jìn)程中的線程都有共性——多個(gè)線程將共享同一個(gè)進(jìn)程虛擬空間滓彰。線程共享的環(huán)境包括:進(jìn)程代碼段控妻、進(jìn)程的公有數(shù)據(jù)等。利用這些共享的數(shù)據(jù)等揭绑,線程很容易實(shí)現(xiàn)相互之間的通信弓候。當(dāng)操作系統(tǒng)創(chuàng)建一個(gè)進(jìn)程時(shí),必須為該進(jìn)程分配獨(dú)立的內(nèi)存空間他匪,并分配大量的相關(guān)資源菇存;但創(chuàng)建一個(gè)線程則簡單很多,因此使用多線程來實(shí)現(xiàn)并發(fā)比使用多進(jìn)程實(shí)現(xiàn)并發(fā)的性能要高得多邦蜜。

使用多線程編程具有如下優(yōu)點(diǎn):??

??? 進(jìn)程之間不能共享內(nèi)存依鸥,但同一進(jìn)程中的線程之間共享內(nèi)存非常容易;??

??? 系統(tǒng)創(chuàng)建進(jìn)程需要為該進(jìn)程重新分配系統(tǒng)資源畦徘,但創(chuàng)建線程則代價(jià)小得多毕籽,因此使用多線程來實(shí)現(xiàn)多任務(wù)并發(fā)比多進(jìn)程的效率高;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末井辆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子溶握,更是在濱河造成了極大的恐慌杯缺,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睡榆,死亡現(xiàn)場離奇詭異萍肆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)胀屿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門塘揣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宿崭,你說我怎么就攤上這事亲铡。” “怎么了葡兑?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵奖蔓,是天一觀的道長。 經(jīng)常有香客問我讹堤,道長吆鹤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任洲守,我火速辦了婚禮疑务,結(jié)果婚禮上沾凄,老公的妹妹穿的比我還像新娘。我一直安慰自己知允,他們只是感情好撒蟀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著廊镜,像睡著了一般牙肝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嗤朴,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天配椭,我揣著相機(jī)與錄音,去河邊找鬼雹姊。 笑死股缸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吱雏。 我是一名探鬼主播敦姻,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼歧杏!你這毒婦竟也來了镰惦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤犬绒,失蹤者是張志新(化名)和其女友劉穎旺入,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凯力,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茵瘾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咐鹤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拗秘。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖祈惶,靈堂內(nèi)的尸體忽然破棺而出雕旨,到底是詐尸還是另有隱情,我是刑警寧澤行瑞,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布奸腺,位于F島的核電站,受9級特大地震影響血久,放射性物質(zhì)發(fā)生泄漏突照。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一氧吐、第九天 我趴在偏房一處隱蔽的房頂上張望讹蘑。 院中可真熱鬧末盔,春花似錦、人聲如沸座慰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽版仔。三九已至游盲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蛮粮,已是汗流浹背益缎。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留然想,地道東北人莺奔。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像变泄,于是被迫代替她去往敵國和親令哟。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容