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