線程與進程的異同

來源:互聯網
上載者:User

很簡單經典的題目,但是要回答全面,還是得好好準備

參考:http://www.ezloo.com/2008/05/process_and_thread.html

1、相同點:
(a)二者都具有ID,一組寄存器,狀態,優先順序以及所要遵循的調度策略。
(b) 每個進程都有一個進程式控制制塊,線程也擁有一個線程式控制制塊。
(c) 線程共用父進程中的資源,子進程也在剛建立之後共用父進程的資源,並將這些記憶體設定為唯讀。直到父,子進程一方嘗試寫這些地區,則核心才為需要修改的那片記憶體拷貝副本;線程和子進程獨立於它們的父進程,競爭使用處理器資源;線程和子進程的建立者可以線上程和子進程上實行某些控制,比如,建立者可以取消、掛起、繼續和修改線程和子進程的優先順序;線程和子進程可以改變其屬性並建立新的資源。
2、不同點:
(a) 線程是進程的一部分, 一個進程中可以包含多個線程,一個沒有線程的進程是可以被看作單線程的,如果一個進程內擁有多個進程,進程的執行過程不是一條線(線程)的,而是多條線(線程)共同完成的。
(b) 系統開銷:啟動一個線程所花費的空間遠遠小於啟動一個進程所花費的空間,而且,線程間彼此切換所需的時間也遠遠小於進程間切換所需要的時間。(c)資源管理: 系統在啟動並執行時候會為每個進程分配不同的地址空間,但是不會為線程分配獨立的地址空間(線程所使用的資源是它所屬的進程的資源),線程組只能共用資源。對不同進程來 說,它們具有獨立的資料空間,要進行資料的傳遞只能通過通訊的方式進行,這種方式不僅費時,而且很不方便。而一個線程的資料可以直接為其他線程所用,這不 僅快捷,而且方便。處理序間通訊其實是指分屬於不同進程的線程之間的通訊,所以進程間的通訊方法同樣適用於線程間的通訊。但對應歸於同一進程的不同線程來說,使用全域變數進行通訊效率會更高。
(d) 與進程的控製表PCB相似,線程也有自己的控製表TCB,但是TCB中所儲存的線程狀態比PCB表中少多了。進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變數,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程式要比多線程的程式健壯,但在進程切換時,耗費資源較大,效率要差一些

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.