天天看點

程序和線程的差別和聯系

  學習電腦和程式設計語言就會遇到程序和線程,初學者往往會在此陷入迷茫和糾結中。其實弄清這兩個概念不是很難。從一定意義上講,程序就是一個應用程式在處理機上的一次執行過程,它是一個動态的概念,而線程是程序中的一部分,程序包含多個線程在運作。

程式和線程的差別和聯系

程序是一個具有獨立功能的程式關于某個資料集合的一次運作活動。它可以申請和擁有系統資源,是一個動态的概念,是一個活動的實體。它不隻是程式的代碼,還包括目前的活動,通過程式計數器的值和處理寄存器的内容來表示。

程式和線程的差別和聯系

程序是一個“執行中的程式”。程式是一個沒有生命的實體,隻有處理器賦予程式生命時,它才能成為一個活動的實體,我們稱其為程序。

程式和線程的差別和聯系

通常在一個程序中可以包含若幹個線程,它們可以利用程序所擁有的資源。在引入線程的作業系統中,通常都是把程序作為配置設定資源的基本機關,而把線程作為獨立運作和獨立排程的基本機關。由于線程比程序更小,基本上不擁有系統資源,故對它的排程所付出的開銷就會小得多,能更高效的提高系統内多個程式間并發執行的程度。

程式和線程的差別和聯系

線程和程序的差別在于,子程序和父程序有不同的代碼和資料空間,而多個線程則共享資料空間,每個線程有自己的執行堆棧和程式計數器為其執行上下文。多線程主要是為了節約CPU時間,發揮利用,根據具體情況而定。線程的運作中需要使用計算機的記憶體資源和CPU。

程式和線程的差別和聯系

線程與程序的差別歸納:

a.位址空間和其它資源:程序間互相獨立,同一程序的各線程間共享。某程序内的線程在其它程序不可見。

b.通信:程序間通信IPC,線程間可以直接讀寫程序資料段(如全局變量)來進行通信——需要程序同步和互斥手段的輔助,以保證資料的一緻性。

c.排程和切換:線程上下文切換比程序上下文切換要快得多。

d.在多線程OS中,程序不是一個可執行的實體。

程式和線程的差別和聯系
程式和線程的差別和聯系

程序是具有一定獨立功能的程式關于某個資料集合上的一次運作活動,程序是系統進行資源配置設定和排程的一個獨立機關。線程是程序的一個實體,是CPU排程和分派的基本機關,它是比程序更小的能獨立運作的基本機關。線程自己基本上不擁有系統資源,隻擁有一點在運作中必不可少的資源(如程式計數器,一組寄存器和棧),但是它可與同屬一個程序的其他的線程共享程序所擁有的全部資源。

程式和線程的差別和聯系

java中程序和線程的差別和聯系:

什麼是程序,什麼是線程

系統要做一件事,運作一個任務,所有運作的任務通常就是一個程式;

每個運作中的程式就是一個程序,這一點在任務管理器上面可以形象的看到。

當一個程式運作時,内部可能會包含多個順序執行流,每個順序執行流就是一個線程。

關于程序的特性

獨立性:程序是系統中獨立存在的實體,它可以擁有自己獨立的資源,每個程序都擁有自己私有的位址空間。在沒有經過程序本身運作的情況下是不能通路其中的内容的。

動态性:程序與程式的差別在于,程式是靜态的,程序是動态的。程式隻是一個靜态的指令集合,而程序是一個正在系統中運作的指令集合。有了時間的概念,如生命周期;

并發性:程序之間,交替着執行。

線程,一個順序執行流;

它是程序的組成部分,一個程序可以有多個線程。

關于線程的特性,或是它的優勢

1、程序之間不能共享記憶體,單線程之間共享記憶體非常的容易

2、系統建立程序需要為該程序重新配置設定系統資源,但建立線程的代價很小。是以多線程的實作多任務并發比多程序實作并發的效率高

3、java語言内置多線程功能支援,而不是單純的作為底層作業系統的排程方式

總結:

一個程式運作至少一個程序,一個程序裡面至少包含一個線程,線程是程序的組成部分。

線程相對于程序而言,很強大了,做到了資源的共享,資源的損耗降低,人為的手工控制程式的運作。