執行緒和程式的區別是什麼,從一些部落格及知乎的總結

OldBoy~發表於2018-01-29

1、執行緒是什麼?程式是什麼?二者有什麼區別和聯絡?
(1)執行緒是程式中實施排程和分派的基本單位; 作業系統提供現成的目的就是為了方便高效地實現併發處理(進一步提高併發度)

(2)程式是程式的一次執行;程式是可以與其他計算併發執行的計算;程式是一個程式程式及其資料在處理器上順序執行時發生的活動;程式是程式在一個資料集合上的執行過程,是系統進行資源分配和排程的一個獨立單位
兩者的聯絡:

程式和執行緒都是作業系統所執行的程式執行的基本單元。

1、一個程式可以有多個執行緒,但至少有一個執行緒;而一個執行緒只能在一個程式的地址空間內活動。
2、資源分配給程式,同一個程式的所有執行緒共享該程式所有資源。
3、CPU分配給執行緒,即真正在處理器執行的是執行緒。
4、執行緒在執行過程中需要協作同步,不同程式的執行緒間要利用訊息通訊的辦法實現同步。

區別:
(1)程式具有獨立的空間地址,一個程式崩潰後,在保護模式下不會對其它程式產生影響。
(2)執行緒只是一個程式的不同執行路徑,執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的地址空間,一個執行緒死掉就等於整個程式死掉。

2、什麼是多執行緒?
多執行緒:是指從軟體或者硬體上實現多個執行緒的併發技術。
多執行緒的好處:
(1)使用多執行緒可以把程式中佔據時間長的任務放到後臺去處理,如圖片、視屏的下載
(2)發揮多核處理器的優勢,併發執行讓系統執行的更快、更流暢,使用者體驗更好
多執行緒的缺點:
(1)大量的執行緒降低程式碼的可讀性;
(2)更多的執行緒需要更多的記憶體空間
(3)當多個執行緒對同一個資源出現爭奪時候要注意執行緒安全的問題。

知乎上的說法

作者:南理漢子

開個QQ,開了一個程式;開了迅雷,開了一個程式。
在QQ的這個程式裡,傳輸文字開一個執行緒、傳輸語音開了一個執行緒、彈出對話方塊又開了一個執行緒。

所以執行某個軟體,相當於開了一個程式。在這個軟體執行的過程裡(在這個程式裡),多個工作支撐的完成QQ的執行,那麼這“多個工作”分別有一個執行緒。

所以一個程式管著多個執行緒。

通俗的講:“程式是爹媽,管著眾多的執行緒兒子”...

作者:知乎使用者
程式是應用程式的執行例項。比如說,當你雙擊的Microsoft Word的圖示,你就開始執行的Word的程式。執行緒是執行程式中的路徑。另外,一個過程可以包含多個執行緒。啟動Word時,作業系統建立一個程式並開始執行該程式的主執行緒。
由於一個程式可以由多個執行緒,執行緒可以被認為是“輕量級”的過程。因此,一個執行緒和一個程式之間的本質區別在於,每一個用來完成的工作。執行緒用於小任務,而程式用於更多的'重量級'的任務 - 應用基本執行。
一個執行緒和程式之間的另一個區別是,在同一程式中的執行緒共享相同的地址空間,而不同的程式沒有。因此執行緒可以讀寫同樣的資料結構和變數,便於執行緒之間的通訊。相反,程式間通訊(IPC)很困難且消耗更多資源。
 
 
作者:Su9ar

比如說:一個老師出了一道題目給一個同學解答,這個同學可以看成是一個執行緒,為了解答的更快,再增加一個同學同時解答,就相當於增加了一個執行緒,以次類推。而解答的過程就可看成是程式。

5/10:修正一下最後一句

老師出題到同學解答,這整個過程可看成是一個程式,而不單是解答的過程。

 

歐陽樂燊

高一升高二是程式 語數外理化生是 執行緒

知乎使用者:程式設計師

打一個通俗易懂的比方吧!

比如你去一個食堂吃飯。裡面有A,B,C,D等一些視窗可以打飯菜或者米粉麻辣燙什麼的。

但是每一個視窗又有打這些菜的師傅。

那麼這些視窗就是程式。

那個那些視窗裡面打菜的師傅就是執行緒。

這個食堂就是系統了。

系統去分配這些程式。

 

 

額外補充

協程只不過是同事並行多個任務而已,但是實際上其實是同步執行的,其中一個任務阻塞,其他的任務必定阻塞。

協程,執行緒,程式,非同步,同步,並行,序列

協程,執行緒,程式,這種是多工排程的形式,程式歸作業系統管理。

同步,非同步是程式阻塞和非阻塞執行的一種方式。

並行和序列就是任務執行是一起執行還是順序執行。

 

 

相關文章