java 中 進程和線程的區別


 

目錄

什么是進程?什么是線程?

為什么要有線程?

進程與線程的區別?

進程與線程的選擇取決條件?

 

 

什么是進程?什么是線程?
進程:進程是並發執行程序在執行過程中資源分配和管理的基本單位(資源分配的最小單位)。進程可以理解為一個應用程序的執行過程,應用程序一旦執行,就是一個進程。每個進程都有自己獨立的地址空間,每啟動一個進程,系統就會為它分配地址空間,建立數據表來維護代碼段、堆棧段和數據段。

線程:程序執行的最小單位。

 

為什么要有線程?
每個進程都有自己的地址空間,即進程空間,在網絡或多用戶換機下,一個服務器通常需要接收大量不確定數量用戶的並發請求,為每一個請求都創建一個進程顯然行不通(系統開銷大響應用戶請求效率低),因此操作系統中線程概念被引進。

 

 

進程與線程的區別?
1. 地址空間: 同一進程的所有線程共享本進程的地址空間,而不同的進程之間的地址空間是獨立的。

2. 資源擁有: 同一進程的所有線程共享本進程的資源,如內存,CPU,IO等。進程之間的資源是獨立的,無法共享。

3. 執行過程:每一個進程可以說就是一個可執行的應用程序,每一個獨立的進程都有一個程序執行的入口,順序執行序列。但是線程不能夠獨立執行,必須依存在應用程序中,由程序的多線程控制機制進行控制。

4. 健壯性: 因為同一進程的所以線程共享此線程的資源,因此當一個線程發生崩潰時,此進程也會發生崩潰。 但是各個進程之間的資源是獨立的,因此當一個進程崩潰時,不會影響其他進程。因此進程比線程健壯。

 

線程執行開銷小,但不利於資源的管理與保護。

進程的執行開銷大,但可以進行資源的管理與保護。進程可以跨機器前移。

 

進程與線程的選擇取決條件?
因為進程是資源分配的基本單位,線程是程序執行的最小單。以及進程與線程之間的健壯性來考慮。

1. 在程序中,如果需要頻繁創建和銷毀的使用線程。因為進程創建和銷毀開銷很大(需要不停的分配資源),但是線程頻繁的調用只是改變CPU的執行,開銷小。

2. 如果需要程序更加的穩定安全時,可以選擇進程。如果追求速度,就選擇線程。


免責聲明!

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



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