進(jìn)程與線程的區(qū)別晨横、進(jìn)程的通信方式、線程的通信方式

? ? ? ? 為自己學(xué)習(xí)方便箫柳,復(fù)制大神的學(xué)習(xí)性文章放在自己簡(jiǎn)書里手形,僅作為自己學(xué)習(xí)方便使用,如果作者疑此行為侵權(quán)悯恍,請(qǐng)隨時(shí)聯(lián)系本人刪除库糠,如有共同學(xué)習(xí)者復(fù)制此文章,請(qǐng)注明原出處(文章來源:http://blog.chinaunix.net/uid-27411029-id-4131123.html)

進(jìn)程與線程的區(qū)別進(jìn)程的通信方式線程的通信方式2011-03-15 01:04

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

通俗的解釋

一個(gè)系統(tǒng)運(yùn)行著很多進(jìn)程坪稽,可以比喻為一條馬路上有很多馬車

不同的進(jìn)程可以理解為不同的馬車

而同一輛馬車可以有很多匹馬來拉--這些馬就是線程

假設(shè)道路的寬度恰好可以通過一輛馬車

道路可以認(rèn)為是臨界資源

那么馬車成為分配資源的最小單位(進(jìn)程)

而同一個(gè)馬車被很多匹馬驅(qū)動(dòng)(線程)--即最小的運(yùn)行單位

每輛馬車馬匹數(shù)=1

所以馬匹數(shù)=1的時(shí)候進(jìn)程和線程沒有嚴(yán)格界限曼玩,只存在一個(gè)概念上的區(qū)分度

馬匹數(shù)1的時(shí)候才可以嚴(yán)格區(qū)分進(jìn)程和線程

專業(yè)的解釋:

簡(jiǎn)而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程.

線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高窒百。另外黍判,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存篙梢,從而極大地提高了程序的運(yùn)行效率顷帖。

線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口贬墩。但是線程不能夠獨(dú)立執(zhí)行榴嗅,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制陶舞。

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

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

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

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

進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進(jìn)程有獨(dú)立的地址空間蛉腌,一個(gè)進(jìn)程崩潰后官份,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑烙丛。線程有自己的堆棧和局部變量舅巷,但線程之間沒有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉蜀变,所以多進(jìn)程的程序要比多線程的程序健壯悄谐,但在進(jìn)程切換時(shí),耗費(fèi)資源較大库北,效率要差一些爬舰。但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程寒瓦,不能用進(jìn)程情屹。如果有興趣深入的話,我建議你們看看《現(xiàn)代操作系統(tǒng)》或者《操作系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)》杂腰。對(duì)就個(gè)問題說得比較清楚垃你。

+++

進(jìn)程概念

進(jìn)程是表示資源分配的基本單位,又是調(diào)度運(yùn)行的基本單位喂很。例如惜颇,用戶運(yùn)行自己的程序,系統(tǒng)就創(chuàng)建一個(gè)進(jìn)程少辣,并為它分配資源凌摄,包括各種表格、內(nèi)存空間漓帅、磁盤空間锨亏、I/O設(shè)備等痴怨。然后,把該進(jìn)程放人進(jìn)程的就緒隊(duì)列器予。進(jìn)程調(diào)度程序選中它浪藻,為它分配CPU以及其它有關(guān)資源,該進(jìn)程才真正運(yùn)行乾翔。所以爱葵,進(jìn)程是系統(tǒng)中的并發(fā)執(zhí)行的單位。

在Mac反浓、Windows NT等采用微內(nèi)核結(jié)構(gòu)的操作系統(tǒng)中钧惧,進(jìn)程的功能發(fā)生了變化:它只是資源分配的單位,而不再是調(diào)度運(yùn)行的單位勾习。在微內(nèi)核系統(tǒng)中,真正調(diào)度運(yùn)行的基本單位是線程懈玻。因此巧婶,實(shí)現(xiàn)并發(fā)功能的單位是線程。

線程概念

線程是進(jìn)程中執(zhí)行運(yùn)算的最小單位涂乌,亦即執(zhí)行處理機(jī)調(diào)度的基本單位艺栈。如果把進(jìn)程理解為在邏輯上操作系統(tǒng)所完成的任務(wù),那么線程表示完成該任務(wù)的許多可能的子任務(wù)之一湾盒。例如湿右,假設(shè)用戶啟動(dòng)了一個(gè)窗口中的數(shù)據(jù)庫應(yīng)用程序,操作系統(tǒng)就將對(duì)數(shù)據(jù)庫的調(diào)用表示為一個(gè)進(jìn)程罚勾。假設(shè)用戶要從數(shù)據(jù)庫中產(chǎn)生一份工資單報(bào)表毅人,并傳到一個(gè)文件中,這是一個(gè)子任務(wù)尖殃;在產(chǎn)生工資單報(bào)表的過程中丈莺,用戶又可以輸人數(shù)據(jù)庫查詢請(qǐng)求,這又是一個(gè)子任務(wù)送丰。這樣缔俄,操作系統(tǒng)則把每一個(gè)請(qǐng)求――工資單報(bào)表和新輸人的數(shù)據(jù)查詢表示為數(shù)據(jù)庫進(jìn)程中的獨(dú)立的線程。線程可以在處理器上獨(dú)立調(diào)度執(zhí)行器躏,這樣俐载,在多處理器環(huán)境下就允許幾個(gè)線程各自在單獨(dú)處理器上進(jìn)行。操作系統(tǒng)提供線程就是為了方便而有效地實(shí)現(xiàn)這種并發(fā)性

引入線程的好處

(1)易于調(diào)度登失。

(2)提高并發(fā)性遏佣。通過線程可方便有效地實(shí)現(xiàn)并發(fā)性。進(jìn)程可創(chuàng)建多個(gè)線程來執(zhí)行同一程序的不同部分壁畸。

(3)開銷少贼急。創(chuàng)建線程比創(chuàng)建進(jìn)程要快茅茂,所需開銷很少。

(4)利于充分發(fā)揮多處理器的功能太抓。通過創(chuàng)建多線程進(jìn)程(即一個(gè)進(jìn)程可具有兩個(gè)或更多個(gè)線程)空闲,每個(gè)線程在一個(gè)處理器上運(yùn)行,從而實(shí)現(xiàn)應(yīng)用程序的并發(fā)性走敌,使每個(gè)處理器都得到充分運(yùn)行碴倾。

++

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

(1)一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程掉丽,但至少有一個(gè)線程跌榔。

(2)資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源捶障。

(3)處理機(jī)分給線程僧须,即真正在處理機(jī)上運(yùn)行的是線程。

(4)線程在執(zhí)行過程中项炼,需要協(xié)作同步担平。不同進(jìn)程的線程間要利用消息通信的辦法實(shí)現(xiàn)同步。

線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體.

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

(1)調(diào)度:線程作為調(diào)度和分配的基本單位锭部,進(jìn)程作為擁有資源的基本單位

(2)并發(fā)性:不僅進(jìn)程之間可以并發(fā)執(zhí)行暂论,同一個(gè)進(jìn)程的多個(gè)線程之間也可并發(fā)執(zhí)行

(3)擁有資源:進(jìn)程是擁有資源的一個(gè)獨(dú)立單位,線程不擁有系統(tǒng)資源拌禾,但可以訪問隸屬于進(jìn)程的資源.

(4)系統(tǒng)開銷:在創(chuàng)建或撤消進(jìn)程時(shí)取胎,由于系統(tǒng)都要為之分配和回收資源,導(dǎo)致系統(tǒng)的開銷明顯大于創(chuàng)建或撤消線程時(shí)的開銷湃窍。+++

進(jìn)程間的通信方式:

1.管道(pipe)及有名管道(named pipe):

管道可用于具有親緣關(guān)系的父子進(jìn)程間的通信闻蛀,有名管道除了具有管道所具有的功能外,它還允許無親緣關(guān)系進(jìn)程間的通信坝咐。

2.信號(hào)(signal):

信號(hào)是在軟件層次上對(duì)中斷機(jī)制的一種模擬循榆,它是比較復(fù)雜的通信方式,用于通知進(jìn)程有某事件發(fā)生墨坚,一個(gè)進(jìn)程收到一個(gè)信號(hào)與處理器收到一個(gè)中斷請(qǐng)求效果上可以說是一致的秧饮。

3.消息隊(duì)列(message queue):

消息隊(duì)列是消息的鏈接表,它克服了上兩種通信方式中信號(hào)量有限的缺點(diǎn)泽篮,具有寫權(quán)限得進(jìn)程可以按照一定得規(guī)則向消息隊(duì)列中添加新信息盗尸;對(duì)消息隊(duì)列有讀權(quán)限得進(jìn)程則可以從消息隊(duì)列中讀取信息。

4.共享內(nèi)存(shared memory):

可以說這是最有用的進(jìn)程間通信方式帽撑。它使得多個(gè)進(jìn)程可以訪問同一塊內(nèi)存空間泼各,不同進(jìn)程可以及時(shí)看到對(duì)方進(jìn)程中對(duì)共享內(nèi)存中數(shù)據(jù)得更新。這種方式需要依靠某種同步操作亏拉,如互斥鎖和信號(hào)量等扣蜻。

5.信號(hào)量(semaphore):

主要作為進(jìn)程之間及同一種進(jìn)程的不同線程之間得同步和互斥手段逆巍。

6.套接字(socket);

這是一種更為一般得進(jìn)程間通信機(jī)制莽使,它可用于網(wǎng)絡(luò)中不同機(jī)器之間的進(jìn)程間通信锐极,應(yīng)用非常廣泛。

++

線程之間的同步通信:

1.信號(hào)量二進(jìn)制信號(hào)量互斥信號(hào)量整數(shù)型信號(hào)量記錄型信號(hào)量

2.消息消息隊(duì)列消息郵箱

3.事件event

互斥型信號(hào)量:必須是同一個(gè)任務(wù)申請(qǐng)芳肌,同一個(gè)任務(wù)釋放灵再,其他任務(wù)釋放無效。同一個(gè)任務(wù)可以遞歸申請(qǐng)亿笤。(互斥信號(hào)量是二進(jìn)制信號(hào)量的一個(gè)子集)

二進(jìn)制信號(hào)量:一個(gè)任務(wù)申請(qǐng)成功后翎迁,可以由另一個(gè)任務(wù)釋放。(與互斥信號(hào)量的區(qū)別)

整數(shù)型信號(hào)量:取值不局限于0和1,可以一個(gè)任務(wù)申請(qǐng)净薛,另一個(gè)任務(wù)釋放汪榔。(包含二進(jìn)制信號(hào)量,二進(jìn)制信號(hào)量是整數(shù)型信號(hào)量的子集)

二進(jìn)制信號(hào)量實(shí)現(xiàn)任務(wù)互斥:

打印機(jī)資源只有一個(gè)肃拜,a bc三個(gè)任務(wù)共享揍异,當(dāng)a取得使用權(quán)后,為了防止其他任務(wù)錯(cuò)誤地釋放了信號(hào)量(二進(jìn)制信號(hào)量允許其他任務(wù)釋放)爆班,必須將打印機(jī)房的門關(guān)起來(進(jìn)入臨界段),用完后辱姨,釋放信號(hào)量柿菩,再把門打開(出臨界段),其他任務(wù)再進(jìn)去打印雨涛。(而互斥型信號(hào)量由于必須由取得信號(hào)量的那個(gè)任務(wù)釋放枢舶,故不會(huì)出現(xiàn)其他任務(wù)錯(cuò)誤地釋放了信號(hào)量的情況出現(xiàn),故不需要有臨界段替久×剐梗互斥型信號(hào)量是二進(jìn)制信號(hào)量的子集。)

二進(jìn)制信號(hào)量實(shí)現(xiàn)任務(wù)同步:

a任務(wù)一直等待信號(hào)量蚯根,b任務(wù)定時(shí)釋放信號(hào)量后众,完成同步功能

記錄型信號(hào)量(record semaphore):

每個(gè)信號(hào)量s除一個(gè)整數(shù)值value(計(jì)數(shù))外,還有一個(gè)等待隊(duì)列List颅拦,其中是阻塞在該信號(hào)量的各個(gè)線程的標(biāo)識(shí)蒂誉。當(dāng)信號(hào)量被釋放一個(gè),值被加一后距帅,系統(tǒng)自動(dòng)從等待隊(duì)列中喚醒一個(gè)等待中的線程右锨,讓其獲得信號(hào)量,同時(shí)信號(hào)量再減一碌秸。

+++

同步和互斥的區(qū)別:

當(dāng)有多個(gè)線程的時(shí)候绍移,經(jīng)常需要去同步這些線程以訪問同一個(gè)數(shù)據(jù)或資源悄窃。例如,假設(shè)有一個(gè)程序蹂窖,其中一個(gè)線程用于把文件讀到內(nèi)存轧抗,而另一個(gè)線程用于統(tǒng)計(jì)文件中的字符數(shù)。當(dāng)然恼策,在把整個(gè)文件調(diào)入內(nèi)存之前,統(tǒng)計(jì)它的計(jì)數(shù)是沒有意義的涣楷。但是分唾,由于每個(gè)操作都有自己的線程,操作系統(tǒng)會(huì)把兩個(gè)線程當(dāng)作是互不相干的任務(wù)分別執(zhí)行狮斗,這樣就可能在沒有把整個(gè)文件裝入內(nèi)存時(shí)統(tǒng)計(jì)字?jǐn)?shù)绽乔。為解決此問題,你必須使兩個(gè)線程同步工作碳褒。

所謂互斥折砸,是指散布在不同進(jìn)程之間的若干程序片斷,當(dāng)某個(gè)進(jìn)程運(yùn)行其中一個(gè)程序片段時(shí)沙峻,其它進(jìn)程就不能運(yùn)行它們之中的任一程序片段睦授,只能等到該進(jìn)程運(yùn)行完這個(gè)程序片段后才可以運(yùn)行。如果用對(duì)資源的訪問來定義的話摔寨,互斥某一資源同時(shí)只允許一個(gè)訪問者對(duì)其進(jìn)行訪問去枷,具有唯一性和排它性。但互斥無法限制訪問者對(duì)資源的訪問順序是复,即訪問是無序的

所謂同步删顶,是指散步在不同進(jìn)程之間的若干程序片斷,它們的運(yùn)行必須嚴(yán)格按照規(guī)定的某種先后次序來運(yùn)行淑廊,這種先后次序依賴于要完成的特定的任務(wù)逗余。如果用對(duì)資源的訪問來定義的話,同步是指在互斥的基礎(chǔ)上(大多數(shù)情況)季惩,通過其它機(jī)制實(shí)現(xiàn)訪問者對(duì)資源的有序訪問录粱。在大多數(shù)情況下,同步已經(jīng)實(shí)現(xiàn)了互斥画拾,特別是所有寫入資源的情況必定是互斥的关摇。少數(shù)情況是指可以允許多個(gè)訪問者同時(shí)訪問資源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碾阁,隨后出現(xiàn)的幾起案子输虱,更是在濱河造成了極大的恐慌,老刑警劉巖脂凶,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宪睹,死亡現(xiàn)場(chǎng)離奇詭異愁茁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)亭病,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門鹅很,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人罪帖,你說我怎么就攤上這事促煮。” “怎么了整袁?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵菠齿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我坐昙,道長(zhǎng)绳匀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任炸客,我火速辦了婚禮疾棵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痹仙。我一直安慰自己是尔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布开仰。 她就那樣靜靜地躺著嗜历,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抖所。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天痕囱,我揣著相機(jī)與錄音田轧,去河邊找鬼。 笑死鞍恢,一個(gè)胖子當(dāng)著我的面吹牛傻粘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帮掉,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼弦悉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蟆炊?” 一聲冷哼從身側(cè)響起稽莉,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涩搓,沒想到半個(gè)月后污秆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劈猪,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年良拼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了战得。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庸推,死狀恐怖常侦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贬媒,我是刑警寧澤聋亡,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站掖蛤,受9級(jí)特大地震影響杀捻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚓庭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一致讥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧器赞,春花似錦垢袱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至夏醉,卻和暖如春爽锥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背畔柔。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國打工氯夷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人靶擦。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像玄捕,于是被迫代替她去往敵國和親踩蔚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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