進程與線程的區別

時間:2014.06.25

地點:基地

-------------------------------------------------------------------------

一、簡述

  進程Process和線程Thread是操作系統的基本概念,抽象而重要。以下從幾個方面來分析進程和線程的區別。

-------------------------------------------------------------------------

二、分析

   進程可認爲是程序執行時的一個實例,是系統進行資源分配的獨立實體每個進程擁有獨立的地址空間,所以一個進程無法直接訪問另一個進程的變量和數據結構。如果希望讓一個進程訪問另一個進程的資源,需要使用進程間通信,比如:共享存儲系統,消息傳遞系統,管道通信系統等。


   一個進程可以擁有多個線程,每個線程使用其所屬的棧空間,線程與進程最主要的區別是:同一個進程內的多個線程會共享部分狀態,即多個線程可以讀寫同一塊內存,換句話說就是進程的內存空間是共享的,每個線程都可以使用這些共享內存,當然,這其中也有某些共享內存在線程之間雖然共享,但各線程需互斥或滿足一定條件才能訪問。於是就有了互斥鎖,防止對個線程同時讀寫某一塊內存區域。還有些內存只能供給固定數目的線程使用,好比一個房間定義只能容納n個人,解決的辦法是在門口掛n把鑰匙,每個進去時就取一把,出來時把鑰匙放回,一旦後面有人想進去而鑰匙架已空,就得在門口排隊等待,這就是信號量,用來保證多個線程互不衝突,互斥鎖是信號量的一種特殊情況(n=1),因此完全可用後者代替前置,但互斥鎖簡單高效,在必須保證資源獨佔的場景下,我們採用互斥鎖。,而一個進程是無法直接訪問另一個進程的內存的。同時,每個線程還擁有自己的寄存器和棧,其他線程可以讀寫這些棧內存。

線程是進程的一個特定執行路徑,當一個線程修改了進程中的資源時,其兄弟線程可以立即看到這種變化。

-------------------------------------------------------------------------

三、總結

1.進程是系統進行資源分配的基本單位,有獨立的內存地址空間;線程是CPU調度的基本單位,沒有單獨的地址空間,有獨立的棧,局部變量,寄存器和程序計數器等。
2.創建進程的開銷大,包括創建虛擬地址空間等需要大量的系統資源;創建線程的開銷小,基本上只有一個內核對象和一個堆棧。
3.一個進程無法直接訪問另一個進程的資源;同一個進程內的多個線程共享進程的資源
4.進程的切換開銷大,線程的切換開銷下;進程間通信開銷大,線程間通信開銷小。
5.線程屬於進程,不能獨立執行,每個進程至少有一個線程,即主線程。
發佈了193 篇原創文章 · 獲贊 53 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章