Posted on 2007-03-24 21:51
kk 閱讀(1173)
評論(0) 編輯 收藏 引用 所屬分類:
IT
???
非常經典的面試題,經常看到,了解一些,但是要詳細把他們以及他們之間的關系講清楚,我還嫩了點。Sigh。這次就好好地把他們總結一下,好好的學習一下。恩。這里講的進程和線程是指windows下的,Unix下的定義有些不同。
進程和線程都是操作系統程序運行的基本單元,系統利用該基本單元實現系統對應用的并發性。一個程序至少有一個進程
,
一個進程至少有一個線程
。
線程是進程內的一個執行單元
,
也是進程內的可調度實體
。
進程
進程含有內存和資源。進程擁有的內存,在
32位下理論上可以有4G!進程擁有的資源則包括核心對象(如file handles和線程)、USER資源(如對話框和字符串)、GDI資源(如Device Context和Brushes)。進程本身并不能夠執行,它只是提供一個安置內存和線程的地方。
進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動
,
進程是系統進行資源分配和調度的一個獨立單位
。
線程
進程并沒有真正地做什么事情。一旦
CPU開始執行程序代碼,你就有了線程,其中有一個主線程。每個線程產生時配有一個堆棧,用來存放局部變量。
線程是進程的一個實體
,
是
CPU
調度和分派的基本單位
,
它是比進程更小的能獨立運行的基本單位
。
線程自己基本上不擁有系統資源
,
只擁有一點在運行中必不可少的資源
(
如程序計數器
,
一組寄存器和棧
)
,
但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源
。
一個線程可以創建和撤銷另一個線程
;
同一個進程中的多個線程之間可以并發執行
。
但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。
進程與線程的區別
:
(1)
調度:線程作為
CPU調度和分配的基本單位,進程作為擁有資源的基本單位
(2)
并發性:不僅進程之間可以并發執行,同一個進程的多個線程之間也可并發執行
(3)
擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬于進程的資源
.
(4)
系統開銷:在創建或撤消進程時,由于系統都要為之分配和回收資源,導致系統的開銷明顯大于創建或撤消線程時的開銷。
GL & HF