進程和線程的區別?什么時候用進程?什么時候用線程?


首先得知道什么是進程什么是線程?

我的理解是進程是指在系統中正在運行的一個應用程序;程序一旦運行就是進程,或者更專業化來說:進程是指程序執行時的一個實例。

線程是進程的一個實體。

進程——資源分配的最小單位,線程——程序執行的最小單位。

線程進程的區別體現在幾個方面:

  1. 因為進程擁有獨立的堆棧空間和數據段,所以每當啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這對於多進程來說十分“奢侈”,系統開銷比較大,而線程不一樣,線程擁有獨立的堆棧空間,但是共享數據段,它們彼此之間使用相同的地址空間,共享大部分數據,比進程更節儉,開銷比較小,切換速度也比進程快,效率高,但是正由於進程之間獨立的特點,使得進程安全性比較高,也因為進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。一個線程死掉就等於整個進程死掉。
  2. 體現在通信機制上面,正因為進程之間互不干擾,相互獨立,進程的通信機制相對很復雜,譬如管道,信號,消息隊列,共享內存,套接字等通信機制,而線程由於共享數據段所以通信機制很方便。
  3. 屬於同一個進程的所有線程共享該進程的所有資源,包括文件描述符。而不同過的進程相互獨立。
  4. 線程又稱為輕量級進程,進程有進程控制塊,線程有線程控制塊。
  5. 線程必定也只能屬於一個進程,而進程可以擁有多個線程而且至少擁有一個線程。

進程與線程的選擇取決以下幾點:

  1. 需要頻繁創建銷毀的優先使用線程;因為對進程來說創建和銷毀一個進程代價是很大的。
  2. 線程的切換速度快,所以在需要大量計算,切換頻繁時用線程,還有耗時的操作使用線程可提高應用程序的響應。
  3. 因為對CPU系統的效率使用上線程更占優,所以可能要發展到多機分布的用進程,多核分布用線程。
  4. 並行操作時使用線程,如C/S架構的服務器端並發線程響應用戶的請求。
  5. 需要更穩定安全時,適合選擇進程;需要速度時,選擇線程更好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM