unity面試題1(進(jìn)程背桐,線程和協(xié)程的區(qū)別)


進(jìn)程

進(jìn)程之間不共享任何狀態(tài)优烧,進(jìn)程的調(diào)度由操作系統(tǒng)完成,每個進(jìn)程都有自己的獨(dú)立的內(nèi)存空間链峭,進(jìn)程間的通訊主要是通過信號傳遞的方式來實(shí)現(xiàn)的畦娄,實(shí)現(xiàn)的方式有多種,信號量弊仪,管道熙卡,事件等,任何一種方式的通訊效率都需要通過內(nèi)核励饵,導(dǎo)致通訊效率比較低驳癌。由于是獨(dú)立的內(nèi)存空間,上下文切換的時候需要保存先調(diào)用棧的信息役听,CPU各寄存器的信息颓鲜,虛擬內(nèi)存,以及打開的相關(guān)句柄等信息典予,所以導(dǎo)致上下文進(jìn)程間切換開銷很大甜滨,通訊麻煩。

線程

線程之間共享變量瘤袖,解決了通訊麻煩的問題衣摩,但對變量的訪問需要鎖,線程的調(diào)度主要也是有操作系統(tǒng)完成捂敌,一個進(jìn)程可以擁有多個線程艾扮,但是其中每個線程會共享父進(jìn)程向操作系統(tǒng)申請資源,這個包括虛擬內(nèi)存占婉,文件等泡嘴,由于是共享資源,所以創(chuàng)建線程所需要的系統(tǒng)資源占用比進(jìn)程小很多锐涯,相應(yīng)的可創(chuàng)建的線程數(shù)量也變得相對多很多磕诊。線程時間的通訊除了可以使用進(jìn)程之間通訊的方式之外還可以通過共享內(nèi)存的方式進(jìn)行通信填物,所以這個速度比通過內(nèi)核要快很多纹腌。另外在調(diào)度方面也是由于內(nèi)存是共享的,所以上下文切換的時候需要保存的東西就相對少一些滞磺,這樣一來上下文切換也變得高效

協(xié)程

協(xié)程的調(diào)度完全由用戶控制升薯,一個線程可以有多個協(xié)程,用戶創(chuàng)建了幾個線程击困,然后每個線程都是循環(huán)按照指定的任務(wù)清單順序完成不同的任務(wù)涎劈,當(dāng)任務(wù)被堵塞的時候執(zhí)行下一個任務(wù)广凸,當(dāng)恢復(fù)的時候再回來執(zhí)行這個任務(wù),任務(wù)之間的切換只需要保存每個任務(wù)的上下文內(nèi)容蛛枚,就像直接操作棧一樣的谅海,這樣就完全沒有內(nèi)核切換的開銷,可以不加鎖的訪問全局變量蹦浦,所以上下文的切換非撑び酰快;另外協(xié)程還需要保證是非堵塞的且沒有相互依賴盲镶,協(xié)程基本上不能同步通訊侥袜,多采用一步的消息通訊,效率比較高溉贿。


進(jìn)程與線程的定義

進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運(yùn)行活動枫吧,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的單位。

線程是進(jìn)程的一個實(shí)體宇色,是CPU調(diào)度和分派的基本單位九杂,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。線程自己基本上不擁有系統(tǒng)資源代兵,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計數(shù)器尼酿,一組寄存器和棧),但是它可與同屬于一個進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源植影。

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

一個線程可以創(chuàng)建和銷毀另一個線程裳擎,同一個進(jìn)程中的多個線程之間可以并發(fā)執(zhí)行。相對進(jìn)程而言思币,線程是一個更加接近執(zhí)行體的概念鹿响,它可以與同進(jìn)程中的其他線程共享數(shù)據(jù),但擁有自己的椆榷觯空間惶我,擁有獨(dú)立的執(zhí)行序列。

線程與進(jìn)程的區(qū)別

進(jìn)程與線程的主要差別在于它們是不同的操作系統(tǒng)的資源管理方式博投。進(jìn)程有獨(dú)立的地址空間绸贡,一個進(jìn)程崩潰后,在保護(hù)模式下不會對其他進(jìn)程產(chǎn)生影響毅哗,而線程死掉就等于整個進(jìn)程死掉听怕,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時虑绵,耗費(fèi)資源較大尿瞭,效率要差一些。但對于一些要求同時進(jìn)行并且又要共享某些變量的并發(fā)操作翅睛,只能用線程声搁,不能用進(jìn)程黑竞。

1)一個程序至少有一個進(jìn)程,一個進(jìn)程至少有一個線程疏旨。

2)線程的劃分尺度小于進(jìn)程很魂,使得多線程程序的并發(fā)性高。

3)另外檐涝,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元莫换,而多個線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率骤铃。

4)線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的拉岁。每個獨(dú)立的線程有一個程序運(yùn)行的入口,順序執(zhí)行序列和程序的出口惰爬。但是線程不能夠獨(dú)立執(zhí)行喊暖,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制撕瞧。

5)從邏輯角度來看陵叽,多線程的意義在于一個應(yīng)用程序中,有多個執(zhí)行部分可以同時執(zhí)行丛版。但操作系統(tǒng)并沒有將多個線程看做多個獨(dú)立的應(yīng)用巩掺,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別页畦。

線程與進(jìn)程的優(yōu)缺點(diǎn)

線程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線程執(zhí)行開銷小胖替,但不利于資源的管理和保護(hù);而進(jìn)程正相反豫缨。同時線程適合于在SMP機(jī)器上運(yùn)行独令,而進(jìn)程則可以跨機(jī)器遷移。


這個解釋是我看到最容易讓人理解的好芭,耐心讀下來

一般將進(jìn)程定義為一個正在運(yùn)行的程序的實(shí)例燃箭。我們在任務(wù)管理器重所看到的每一項(xiàng),就可以理解為一個進(jìn)程舍败,每個進(jìn)程都有一個地址空間招狸,這個地址空間里有可執(zhí)行文件的代碼和數(shù)據(jù),以及線程堆棧等邻薯。一個程序至少有一個進(jìn)程裙戏。進(jìn)程可以創(chuàng)建子進(jìn)程,創(chuàng)建的子進(jìn)程可以和父進(jìn)程一起工作弛说,也可以獨(dú)立運(yùn)行挽懦。

線程是隸屬于進(jìn)程的翰意,也就是說木人,線程是不能單獨(dú)存在的信柿,線程存在于進(jìn)程中。每個進(jìn)程至少有一個主線程醒第,進(jìn)程里的線程就負(fù)責(zé)執(zhí)行進(jìn)程里的代碼渔嚷,這也叫做進(jìn)程的“惰性”。線程所使用的資源是它所屬的進(jìn)程的資源稠曼。線程也有自己的資源形病,主要組成部分就是一些必要的計數(shù)器和線程棧,占用的資源很少霞幅。我們可以理解為進(jìn)程就是個容器漠吻,而線程才是真正干活的。線程可以在內(nèi)核空間實(shí)現(xiàn)司恳,也可以在用戶空間實(shí)現(xiàn)途乃。

下面列舉一下進(jìn)程和線程中的一些概念。

進(jìn)程:創(chuàng)建扔傅,銷毀耍共,創(chuàng)建子進(jìn)程(fork),優(yōu)先級猎塞。

線程:創(chuàng)建试读,掛起,恢復(fù)荠耽,銷毀钩骇,切換,協(xié)作铝量,睡眠伊履,喚醒,等待款违,同步唐瀑,鎖,優(yōu)先級


擴(kuò)展知識

linux沒有內(nèi)核上的多線程實(shí)現(xiàn)插爹,但是不能說linux沒有多線程哄辣。WINDOWS有內(nèi)核的多線程實(shí)現(xiàn)。

進(jìn)程開銷大赠尾,線程開銷小力穗,但是linux的進(jìn)程和線程開銷差異不明顯。

并行的實(shí)現(xiàn)離不開多線程气嫁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末当窗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寸宵,更是在濱河造成了極大的恐慌崖面,老刑警劉巖元咙,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巫员,居然都是意外死亡庶香,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門简识,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赶掖,“玉大人,你說我怎么就攤上這事七扰∩萋福” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵颈走,是天一觀的道長呈驶。 經(jīng)常有香客問我,道長疫鹊,這世上最難降的妖魔是什么袖瞻? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮拆吆,結(jié)果婚禮上聋迎,老公的妹妹穿的比我還像新娘。我一直安慰自己枣耀,他們只是感情好霉晕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捞奕,像睡著了一般牺堰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颅围,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天伟葫,我揣著相機(jī)與錄音,去河邊找鬼院促。 笑死筏养,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的常拓。 我是一名探鬼主播渐溶,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弄抬!你這毒婦竟也來了茎辐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拖陆,沒想到半個月后弛槐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慕蔚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了斋配。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孔飒。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艰争,靈堂內(nèi)的尸體忽然破棺而出坏瞄,到底是詐尸還是另有隱情,我是刑警寧澤甩卓,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布鸠匀,位于F島的核電站,受9級特大地震影響逾柿,放射性物質(zhì)發(fā)生泄漏缀棍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一机错、第九天 我趴在偏房一處隱蔽的房頂上張望爬范。 院中可真熱鬧,春花似錦弱匪、人聲如沸青瀑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斥难。三九已至,卻和暖如春帘饶,著一層夾襖步出監(jiān)牢的瞬間哑诊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工及刻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搭儒,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓提茁,卻偏偏與公主長得像淹禾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茴扁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

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

  • 又來到了一個老生常談的問題铃岔,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個問題開始,來談?wù)劜?..
    tangsl閱讀 4,134評論 0 23
  • 從三月份找實(shí)習(xí)到現(xiàn)在毁习,面了一些公司智嚷,掛了不少,但最終還是拿到小米纺且、百度盏道、阿里、京東载碌、新浪猜嘱、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,278評論 11 349
  • 一嫁艇、進(jìn)程和線程 進(jìn)程 進(jìn)程就是一個執(zhí)行中的程序?qū)嵗柿妫總€進(jìn)程都有自己獨(dú)立的一塊內(nèi)存空間,一個進(jìn)程中可以有多個線程步咪。...
    阿敏其人閱讀 2,612評論 0 13
  • 我在之前介紹北美各種和數(shù)據(jù)分析相關(guān)職位要求的時候论皆,從技術(shù)層面上列舉了一些數(shù)據(jù)科學(xué)家需要的技能。我們現(xiàn)在進(jìn)一步討論下...
    惹事的兔子閱讀 600評論 2 4
  • 三十年后的深夜猾漫, 她又像是懷著了点晴, 十個月的身孕。 把孩子摟在胸前悯周, 靠在床頭邊觉鼻, 不禁與孩子一起酣睡。 我夜深回...
    余光隱閱讀 318評論 0 0