Linux程序與執行緒的區別和聯絡

時間 2022-08-31 17:53:23

1樓:

程序中可包含多個執行緒,最少1個,程序可控制程序內線程的執行暫停及結束,執行緒可共享程序全域性變數,程序與程序是單獨個體,相互不能直接訪問各自執行緒及全域性變數

2樓:老男孩教育

什麼是執行緒?是程序中執行的一條路徑,是系統排程的最小單位。

什麼是程序?是正在執行的程式,是系統分配資源的最小單位。

執行緒與程序之間有什麼關係?1.乙個程序可以有多個執行緒,乙個執行緒只能屬於乙個程序。

2.同乙個程序下的所有執行緒共享該程序下的所有資源。

3.真正在處理機上執行的是執行緒,不是程序,執行緒是程序內的乙個執行單元,是程序內的可排程實體。

linux執行緒與程序有什麼區別?程序:優點:多程序可以同時利用多個cpu,能夠同時進行多個操作。

缺點:耗費資源(建立乙個程序重新開闢記憶體空間)。

程序不是越多越好,一般程序個數等於cpu個數。

執行緒:優點:共享記憶體,尤其是進行io操作(網路、磁碟)的時候(io操作很少用cpu),可以使用多執行緒執行併發操作。

缺點:搶占資源。

linux中程序和執行緒的對比與區別

3樓:碼農架構

[作業系統]程序和執行緒的區別

麻煩解釋一下linux下程序和執行緒有什麼區別和聯絡,linux下多執行緒和多程序通訊的實現方法,請通俗解釋

4樓:匿名使用者

兄弟看到你這麼高的分我就找了些資料:也算是對昨天學的知識總結一下吧

一、先說概念不管是windows還是linux下的程序和執行緒概念都是一樣的,只是管理程序和執行緒的方式不一樣,這個是前提,到時候你可別問我windows下程序和執行緒啊。這個涉及到作業系統原理。下面給你解答。

說道程序不得不提作業這個名詞 ,我想兄弟你電腦裡不會有乙個程式吧對不?當你的系統啟動完畢後你看看你的任務管理器裡是不是有很多程序呢?那麼多程式是怎麼調如記憶體呢?

能理解嗎?這裡要明白程式和程序的關係,程式是你磁碟上的乙個檔案,當你需要它時進入記憶體後才成為程序,好比qq在磁碟上就是乙個檔案而已,只有進入了記憶體才成為程序,程序是活動的。qq要掃瞄你檔案啊,記錄你聊天記錄啊,偷偷上傳個啥東西什麼的你也不知道對不,他是活動的。

這個能明白嗎?

再看作業,這個作業可不是你寫作業的那個作業啊。系統一看好傢伙你個qq那麼大的傢伙你想一下子進入記憶體啊?沒門!

慢慢來嘛,系統就把qq程式分為好幾塊,這幾塊不能亂分的,要符合自然結構就是迴圈啦選擇啦這樣的結構,你把人家迴圈結構咔嚓截斷了,怎麼讓人家qq執行啊?這就是作業要一塊一塊的進入記憶體,同時要為作業產生jcb(job control block)作業控制塊,你進入記憶體不能亂跑啊,要聽系統的話,你要是進入系統自己的記憶體。框一下,記憶體不能讀寫 對話方塊就出來了,嚴重點直接藍臉給你!

你懂得。這是window下的,linux下直接給你報錯!沒事了就!

所一系統通過jcb控制程序。jcb包含了程序號優先順序好多內容,你開啟你的windows任務管理器看看程序是不是有好多屬性啊?那就是pcb(prcess,control block)同理作業也包含那些內容只是多少而已。

下面寫出程序特點:

1、程序是分配計算機資源最小的單位。你想啊人是要用程式幹活的吧?你把程式調入記憶體成了就成了程序,所以說程序是分配資源的最小單位。

你在linux下開啟終端輸入top命令看是不是有好多程序?

2、程序有作業系統為作業產生。有「父程序」產生「子程序」之間是父子關係,並可以繼續向下產生「子程序」。還拿qq來說,你雙擊qq.

exe。qq啟動了輸入賬號密碼開啟主介面了。這時候你要聊天,qq程序趕緊產生個「兒子」說 「兒子你去陪主人聊天去吧。

這樣子程序產生了。突然你想看美女要傳**這時候那個」兒子「有」生「了乙個」兒子「說」兒子「你去傳**。那個「兒子領到任務去傳**了。

這時你想關了qq,qq提示你說」你還有個「兒子」和「孫子」還在幹活呢你真要結束嗎?你蒽了確定。qq對他「兒子」(你聊天視窗)說:

」兒子啊對不起了,主人要關閉我你也不能活啊「咔嚓一下」兒子「死了,兒子死之前對他兒子說:「兒子啊你爺爺不讓我活了,你也別活了咔嚓孫子也死了。最後世界安靜了。

這就是程序的父子關係。能明白嗎?記住:

程序之活動在記憶體中。不能使用cpu,只管分配資源。

再說執行緒:執行緒也產生在記憶體中並且在記憶體中存在相當長的時間,但它的活動區域主要在cpu中,並且執行和滅亡都存在於cpu中,可以這麼說,執行緒是程式中能被系統排程進入cpu中最小程式單位,它能直接使用程序分配的cpu的資源。

還拿qq來說當你要傳檔案時qq總要判斷一下檔案的副檔名吧,ok這時那個」兒子「趕緊對它爸爸說我需要乙個執行緒判斷副檔名qq趕緊對乙個管這個的執行緒說:」快點去cpu裡計算下那個副檔名是什麼然後向主人報告計算完了就「死了」消亡了,但是它的執行緒還在記憶體中!還等著你下一次傳檔案然後計算然後消亡!

執行緒之間是相互獨立的。乙個在cpu,乙個在記憶體裡還能有關係嗎對不?cpu在每乙個瞬間只能進入乙個執行緒,當執行緒進入cpu時立即產生乙個新的執行緒,新執行緒仍停留在記憶體中,就好比上面那個傳檔案還會等著你再傳檔案再計算副檔名。

執行緒相對執行緒是獨立的,但它在記憶體中並不是獨立的,這就好比你不開qq能用qq傳輸檔案嗎?它只存在與程序分配的資源中,也就是說計算副檔名這個執行緒只能停留在qq這個程序中,不能跑到別的程序裡!!相當於程式產生了新的程序和執行緒,程序向cpu申請資源,再有執行緒來使用,他們都是為程式服務的只是分工不同!

因為你沒提問linux下是怎麼管理程序和執行緒的所以我就不回答了,這個問題我建議你還是看看《笨兔兔的故事》裡面講到了linux是怎麼管理程序和執行緒的。挺幽默的比我說得還好。

你第二個問題說實話我回答不了你!我想你現在連程序和執行緒還沒理解第二個你更理解不了了你說對不?我猜的其實你用c/c++不管是在windows下程式設計還是在linux下程式設計思想都是一樣的對吧,如果你理解了在windows下執行緒間通訊,在linux更沒問題了!

參考資料:黑客手冊2009合訂本非安全第一二季244頁,245頁,328頁,329頁,398頁,399頁

**作業系統原理 (一 二三)

ubuntu中文論壇 笨兔兔的故事

希望我的回答你能理解

5樓:匿名使用者

這玩意還真通俗不了,區別還是很多的,而且每條都能說上大半天。。。可以先說下聯絡。首先linux包括核心執行緒、程序、使用者執行緒這三個概念,核心執行緒是在linux核心中的概念,程序通常是都是使用者空間中的概念,但是由於在核心中為使用者空間建立程序的時候,和建立核心執行緒是基本一樣的,所以可以說或者可以看成乙個程序對應乙個核心執行緒,但還有核心執行緒不是用於服務程序的。

而使用者執行緒不是核心的概念,換句話說使用者執行緒對於核心來說一無所知,所以從這個角度說程序和使用者執行緒一點關係都沒有。由於執行緒通常是由執行緒庫提供的,例如posix執行緒庫、cthread執行緒庫等,這些執行緒庫是使用者空間動態鏈結庫,所以哪個程序呼叫這個庫,執行緒以及執行緒管理、排程程式就在哪個程序裡,不同程序呼叫的庫所帶來的執行緒、執行緒管理都相互無關。這就是聯絡了。

現在說區別,討論區別要分類看,首先是排程:程序排程由核心來排程,程序在核心裡有核心執行緒來支援,乙個核心執行緒自然包含一套資料結構來儲存相關資訊;使用者執行緒是庫檔案支援的,所以資料結構定義、排程函式都在庫里,當然為了提高使用者執行緒的被排程的許可權以及實時性等優勢,有的執行緒庫已經通過一些方式讓核心知道使用者執行緒的存在,這是更遠的話題了。再看記憶體:

最常說的一句話就是程序有獨立的記憶體空間而執行緒沒有,含義是每個程序有自己的一套頁表,一套頁表就意味著乙個完整的記憶體空間,比如32位作業系統裡就是2g或者3g的空間(視不同的cpu和作業系統核心實現方式),由於程序在核心裡有自己的地位,所以更換程序就能更換整個頁表;執行緒在核心裡沒有地位,所以只要程序沒換,執行緒換了,頁表還是沒變,所以大家的空間一樣,這個時候只能靠程式設計師自己去保護各個執行緒以及執行緒庫的能力,舉個例子:我變了乙個程式a.exe和另乙個程式b.

exe,讓b的原始碼裡有個函式叫abc(),在a的原始碼裡我不可能直接呼叫abc(),因為編譯完了,即使我告訴編譯器abc()函式在b.exe裡的位址給a原始碼,在執行時a.exe程序空間裡的那個位址放的絕對不是b裡的abc()函式,這時只能使用遠端呼叫,乙個遠端呼叫的過程基本上和一次網路上兩個機子傳遞一次資料報差不多,可見對於作業系統來說a和b程序裡的東西與兩台機子上的東西一樣,相互隔離相互獨立。

這兩類區別還會引申出很多細節上的區別,但都歸根於這兩點。希望對你有幫助

6樓:匿名使用者

區別和聯絡:

1、程序是獨立執行的實體,有獨立的資源分配;

2、同一程序的執行緒之間共享程序的資源;

3、所有的程序至少有乙個執行執行緒;

4、執行緒的建立和切換代價比程序的小;

執行緒間的通訊方法:

1、同一程序的執行緒之間通訊的最簡單辦法就是使用全域性變數;

2、不同程序的執行緒之間通訊需要通過下面程序間的通訊來實現;

程序間的通訊方法:

1、管道

2、訊號量

3、共享記憶體

4、訊息佇列

5、套接字

linux環境執行緒和程序的區別到底是什麼

7樓:匿名使用者

程序是一段正在執行的程式,而執行緒有時也被稱為輕量級程序,它是程序的執行單元,乙個程序可以擁有多個執行緒,各個執行緒之間共享程式的記憶體空間,但是,各個執行緒擁有自己的棧空間。

程式一旦執行就是程序,或者更專業化來說:程序是指程式執行時的乙個例項。

執行緒是程序的乙個實體。

程序——資源分配的最小單位,執行緒——程式執行的最小單位。

8樓:七彩虹科技****

在多程序情況下,每個程序都有自己的獨立空間,而多執行緒情況下,同一程序內的執行緒共享程序的空間位址。因此,建立乙個新的程序時就要耗費時間來為其分配系統資源,而建立乙個新的執行緒花費的時間要少的多

在系統排程方面,由於程序位址空間獨立而執行緒共享位址空間,執行緒間的切換速度要遠遠快於程序間的切換

在通訊機制方面,程序間資料相互獨立,彼此間通訊要以專門的通訊方式進行,通訊時必須經過作業系統,而執行緒是資料共享的。

如何通俗的理解執行緒和程序呢

樓上太扯了.沒抓住本質,不要誤導.普通程式都是單程序單執行緒的,就像乙個人在幹一件事.多程序就像多個人在幹多件事.當然,也可能是協作完成一件事 關鍵在於多人.每個人是獨立的.而多執行緒就像是乙個人同時幹多件事.什麼時候幹哪件事是不確定的.所以乙個程序就像乙個獨立的人,而乙個執行緒只是乙個人的一段時間...

執行緒和協程有什麼區別呢?程序,執行緒和協程的區別

協同程式 coroutine 與多執行緒情況下的執行緒比較類似 有自己的堆疊,自己的區域性變數,有自己的指令指標陸態消 ip,instruction pointer 閉蠢,但與其它協同程式共享全域性變數等很多資訊。協程 協同程式 同一時間只能執行某個協程。開闢多個協程開銷不大。協程適合對某任務進行分...

請教程序 執行緒是以什麼樣的形式存在

乙個跑起來的程式 就叫程序 沒跑起來 躺在你硬碟上的 exe就是程式 程序也可以這麼說 就是跑起來的程式 執行緒 是獨立執行的基本單元 cpu排程分配給各執行緒時間片 共用cpu 程序執行起來,系統會自動為其 建立乙個執行緒 這個執行緒是此程序的主線程 實際是這個執行緒在執行 程序只是這個執行緒的容...

求linux下多執行緒socket監聽的c程式高分

include include include include include include include include define port 8888 void yourfunction void connect fd 你沒說具體的應用,所以只能寫這麼多了。在這裡面直接對connfd呼叫r...

linux命令怎麼檢視占用cpu的程序

htop這個工具最簡單。很小很強大很友好 ps aux 即可看各個程序占用的cpu和memory 下面這幾個命令組合對於管理rs 6000 aix系統有幫助 1 顯示10個消耗cpu最多的程序 ps aux head 1 ps aux sort rn 2 head 10 2 顯示10個消耗儲存空間最...