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 是作業系統能夠進行運算排程的最小單位。它被...
程序和執行緒的區別
程序是一個具有獨立功能的程式關於某個資料集合的一次執行活動。它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體。它不只是程式的 還包括當前的活動,通過程式計數器的值和處理暫存器的內容來表示。程序是一個 執行中的程式 程式是一個沒有生命的實體,只有處理器賦予程式生命時,它才能成為一個活動的實...