Linux程式設計和程序 執行緒,linux 下 程序和執行緒的區別

時間 2022-03-31 09:35:21

1樓:匿名使用者

給你舉個例子:

比方電腦裡你安裝的qq,暴風,迅雷他們都可以單獨獨立執行,那麼我們就可以說qq是一個程序,暴風也是一個程序,迅雷更是一個程序

而要說到什麼是執行緒,執行緒是執行在程序裡裡的程式

舉例qq(執行緒),我們能同時用qq軟體進行聊天,聽**,為什麼呢,這就是執行緒的優點所在,單獨執行但又不互相干擾,建立執行緒有兩種方法,執行緒一定要複寫run方法,用start啟動執行緒

使用thread建立執行緒:

public mythread extends thread

使用runnable建立執行緒:

public mythread implements runnable

對於這兩種方法,實現執行緒,但是一般情況下我們都用第二種

因為第一種是用繼承的關係,而第二種為實現介面

但是相對於第一種,第二種我們還可以另外繼承類,來擴充套件功能,所以程式設計序時比較趨向於用實現的方法寫執行緒

給你一個完整的例子:

class mythread implements runnable}}

};public class syncdemo01

};這是一個三執行緒:

三個執行緒都start,所以他們可以同時執行,但是又由於電腦cpu只有一個,只能執行一個執行緒,那麼這三個執行緒就會去搶,誰搶到誰就線執行,start表示開始執行run方法,導致三個執行緒共享5個車票,你會發現每次執行結果不一樣,這就是搶的結果,如果把車票寫在run方法裡就不一樣了

thread-0賣票:ticket = 5

thread-0賣票:ticket = 4

thread-0賣票:ticket = 3

thread-2賣票:ticket = 2

thread-2賣票:ticket = 1

結果二:

thread-0賣票:ticket = 5

thread-0賣票:ticket = 4

thread-0賣票:ticket = 3

thread-1賣票:ticket = 2

thread-0賣票:ticket = 1

反正很多答案,自己試。

2樓:匿名使用者

程序和程序是獨立的,一般情況是不能互相訪問的,除非共享記憶體或者訊號通道。一個程序可以含有多個執行緒,每個執行緒是可以並行執行的,而且可以共用程序的儲存單元。做的好的軟體一般都含有執行緒,例如一個執行緒負責介面操作,一個執行緒負責核心,這種分工尤其在多核系統中效率會很高。

3樓:匿名使用者

這個還是自己看書的好,在這你能問出什麼……

linux 下 程序和執行緒的區別

4樓:錦衣衛使方覺亮

程序是程式的一次執行過程。

一個程式至少有一個程序,一個程序至少有一個執行緒.

執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。

執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有一個程式執行的入口、順序執行序列和程式的出口。

但是執行緒不能夠獨立執行,必須依存在應用程式的程序中,由程序提供多個執行緒執行控制。

在windows中的程序、執行緒和在linux中的程序、執行緒有什麼區別?

5樓:百元新

1、windows裡的程序/執行緒是繼承自os/2的。在windows裡,"程序"是指一個程式,而"執行緒"是一個"程序"裡的一個執行"線索"。從核心上講,windows的多程序與linux並無多大的區別,在windows裡的執行緒才相當於linux的程序,是一個實際正在執行的**。

但是,windows裡同一個程序裡各個執行緒之間是共享資料段的。這才是與linux的程序最大的不同。

2、在windows下,使用createthread函式建立執行緒,與linux下建立程序同,windows執行緒不是從建立處開始執行的,而是由createthread指定一個函式,執行緒就從那個函式處開始執行。此程式同前面的unix程式一樣,由兩個執行緒各列印1000條資訊。threadid是子執行緒的執行緒號,另外,全域性變數g是子執行緒與父執行緒共享的,這就是與linux最大的不同之處。

大家可以看出,windows的程序/執行緒要比linux複雜,在linux要實現類似

windows的執行緒並不難,只要fork以後,讓子程序呼叫threadproc函式,並且為全域性變數開設共享資料區就行了,但在windows下就無法實現類似fork的功能了。所以現在windows下的c語言編譯器所提供的庫函式雖然已經能相容大多數linux/unix的庫函式,但卻仍無法實現fork。

3、對於多工系統,共享資料區是必要的,但也是一個容易引起混亂的問題,windows下,一個程式設計師很容易忘記執行緒之間的資料是共享的這一情況,一個執行緒修改過一個變數後,另一個執行緒卻又修改了它,結果引起程式出問題。但在linux下,由於變數本來並不共享,而由程式設計師來顯式地指定要共享的資料,使程式變得更清晰與安全。

6樓:匿名使用者

對於windows來說,程序和執行緒的概念都是有著明確定義的,程序的概念對應於一個程式的執行例項(instance),而執行緒則是程式**執行的最小單元。createthread()用於建立一個新的執行緒,傳遞執行緒函式的入口地址和呼叫引數給新建的執行緒,然後新執行緒就開始執行了。

windows下,一個典型的執行緒擁有自己的堆疊、暫存器(包括程式計數器pc,用於指向下一條應該執行的指令在記憶體中的位置),而**段、資料段、開啟檔案這些程序級資源是同一程序內多個執行緒所共享的。因此同一程序的不同執行緒可以很方便的通過全域性變數(資料段)進行通訊,大家都可以對資料段進行讀寫,這很方便,也被在安全性方面詬病,因為它要求程式設計師時刻意識到這些資料不是執行緒獨立的。

對於linux來說,則沒有很明確的程序、執行緒概念。首先linux只有程序而沒有執行緒,然而它的程序又可以表現得像windows下的執行緒。linux利用fork()和exec函式族來操作多程序。

fork()函式可以在程序執行的任何階段被呼叫,一旦呼叫,當前程序就被分叉成兩個程序——父程序和子程序,兩者擁有相同的**段和暫時相同的資料段(雖然暫時相同,但從分叉開的時刻就是邏輯上的兩個資料段了,之所以說是邏輯上的,是因為這裡是「寫時複製」機制,也就是,除非萬不得已有一個程序對資料段進行了寫操作,否則系統不去複製資料段,這樣達到了負擔最小),兩者的區別在於fork()函式返回值,對於子程序來說返回為0,對於父程序來說返回的是子程序id,因此可以通過if(fork()==0)…else…來讓父子程序執行不同的**段,從而實現「分叉」。

而linux下的程序不能像windows下執行緒那樣方便地通訊,因為他們沒有共享資料段、地址空間等。它們之間的通訊是通過所謂ipc(interprocess communication)來進行的。具體有管道(無名管道用於父子程序間通訊,命名管道可以用於任意兩個程序間的通訊)、共享記憶體(一個程序向系統申請一塊可以被共享的記憶體,其它程序通過識別符號取得這塊記憶體,並將其連線到自己的地址空間中,效果上類似於windows下的多執行緒間的共享資料段),訊號量,套接字。

7樓:匿名使用者

liunx 中只有程序沒有執行緒。

linux 下 程序和執行緒的區別

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

8樓:匿名使用者

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

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

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

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

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

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

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

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

linux下多程序或者多執行緒程式設計的問題。新手,望指教! 5

10樓:海南小蟋蟀

你好,多程序或多執行緒,都不會阻塞當前語句**。為了您的理解,我就大膽舉下面兩個例子:

多程序:你可以看成是本來是一條路的,現在從中間拆成兩條,然後每一條路都有屬於自己這條路的**在執行。

多執行緒:你可以看成是一條路,然後分出車道,比如左車道和右車道甚至是停車道,然後每條車道都單獨通車,其他車道的不能對這條車道進行干擾。

所以,把一條路從中間拆成兩條,成本是很高的。但是把一條路分車道,成本就不是很高了。

對於您提出的main函式的疑問,當main函式最後執行完畢,程式退出後,所有的程序包括執行緒,都會被關閉的,哪怕你的程式中沒有關閉,作業系統也會幫你關閉的,現在的作業系統都非常的完善了。當然,也存在有執行緒或程序不被釋放的特殊情況,最好在程式設計中要記得釋放。

11樓:匿名使用者

第一個問題,不管是建立程序或者建立執行緒都不會阻塞,建立完畢馬上返回不會等待子程序或者子執行緒的執行

第二個問題

首先程序和執行緒是不一樣的

多程序時,父程序如果先結束,那麼子程序會被init程序接收成為init程序的子程序,接下來子程序接著執行,直到結束,init程序負責取得這些子程序的結束狀態並釋放程序資源。而如果是子程序先結束,那麼父程序應當用wait或者waitpid去獲取子程序的結束狀態並釋放程序資源,否則子程序會成為僵死程序,它佔用的程序資源不會釋放

多執行緒時,如果父執行緒或者說你講的main結束時使用return或者exit或者處理完畢結束,那麼整個程序都結束,其他子執行緒自然結束。如果main結束時使用的是pthread_exit那麼只有父執行緒結束,子執行緒還在執行。同樣對於子執行緒結束時如果呼叫了exit,那麼整個程序包括父執行緒結束,如果呼叫了pthread_exit或者正常結束,那麼只有子執行緒結束。

另外子執行緒結束時如果沒有分離屬性,其他執行緒應當使用pthread_join去獲取執行緒結束狀態並釋放執行緒資源,如同程序裡的wait和waitpid

linux 下 程序和執行緒的區別

聯絡 一個執行緒可以建立和撤銷另一個執行緒 同一個程序中的多個執行緒之間可以併發執行 相對程序而言,執行緒是一個更加接近於執行體的概念,它可以與同程序中的其他執行緒共享資料,但擁有自己的棧空間,擁有獨立的執行序列。區別 程序和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程序有獨立的地址空間...

程序和執行緒是什麼,有什麼區別呢,程序和執行緒有什麼區別

啃芝士 程序和執行緒是什麼關係?有什麼區別?程序和執行緒有什麼區別? xxp閃電的力量 1 性質不同 程序 process 是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。執行緒 英語 thread 是作業系統能夠進行運算排程的最小單位。它被...

程序和執行緒的區別

程序是一個具有獨立功能的程式關於某個資料集合的一次執行活動。它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體。它不只是程式的 還包括當前的活動,通過程式計數器的值和處理暫存器的內容來表示。程序是一個 執行中的程式 程式是一個沒有生命的實體,只有處理器賦予程式生命時,它才能成為一個活動的實...