线程与进程的异同
很簡單經(jīng)典的題目,但是要回答全面,還是得好好準(zhǔn)備
參考:http://www.ezloo.com/2008/05/process_and_thread.html
1、相同點:(a)二者都具有ID,一組寄存器,狀態(tài),優(yōu)先級以及所要遵循的調(diào)度策略。
(b) 每個進(jìn)程都有一個進(jìn)程控制塊,線程也擁有一個線程控制塊。
(c) 線程共享父進(jìn)程中的資源,子進(jìn)程也在剛創(chuàng)建之后共享父進(jìn)程的資源,并將這些內(nèi)存設(shè)置為只讀。直到父,子進(jìn)程一方嘗試寫這些區(qū)域,則內(nèi)核才為需要修改的那片內(nèi)存拷貝副本;線程和子進(jìn)程獨立于它們的父進(jìn)程,競爭使用處理器資源;線程和子進(jìn)程的創(chuàng)建者可以在線程和子進(jìn)程上實行某些控制,比如,創(chuàng)建者可以取消、掛起、繼續(xù)和修改線程和子進(jìn)程的優(yōu)先級;線程和子進(jìn)程可以改變其屬性并創(chuàng)建新的資源。
2、不同點:
(a) 線程是進(jìn)程的一部分, 一個進(jìn)程中可以包含多個線程,一個沒有線程的進(jìn)程是可以被看作單線程的,如果一個進(jìn)程內(nèi)擁有多個進(jìn)程,進(jìn)程的執(zhí)行過程不是一條線(線程)的,而是多條線(線程)共同完成的。
(b) 系統(tǒng)開銷:啟動一個線程所花費的空間遠(yuǎn)遠(yuǎn)小于啟動一個進(jìn)程所花費的空間,而且,線程間彼此切換所需的時間也遠(yuǎn)遠(yuǎn)小于進(jìn)程間切換所需要的時間。 (c)資源管理: 系統(tǒng)在運行的時候會為每個進(jìn)程分配不同的地址空間,但是不會為線程分配獨立的地址空間(線程所使用的資源是它所屬的進(jìn)程的資源),線程組只能共享資源。對不同進(jìn)程來 說,它們具有獨立的數(shù)據(jù)空間,要進(jìn)行數(shù)據(jù)的傳遞只能通過通信的方式進(jìn)行,這種方式不僅費時,而且很不方便。而一個線程的數(shù)據(jù)可以直接為其他線程所用,這不 僅快捷,而且方便。進(jìn)程間通信其實是指分屬于不同進(jìn)程的線程之間的通訊,所以進(jìn)程間的通信方法同樣適用于線程間的通信。但對應(yīng)歸于同一進(jìn)程的不同線程來說,使用全局變量進(jìn)行通信效率會更高。
(d) 與進(jìn)程的控制表PCB相似,線程也有自己的控制表TCB,但是TCB中所保存的線程狀態(tài)比PCB表中少多了。
進(jìn)程有獨立的地址空間,一個進(jìn)程崩潰后,在保護(hù)模式下不會對其它進(jìn)程產(chǎn)生影響,而線程只是一個進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時,耗費資源較大,效率要差一些
總結(jié)
- 上一篇: struc,union,class的内存
- 下一篇: 满足条件的两个数或多个数