目錄
什么是進程?什么是線程?
進程:進程是並發執行程序在執行過程中資源分配和管理的基本單位(資源分配的最小單位)。進程可以理解為一個應用程序的執行過程,應用程序一旦執行,就是一個進程。每個進程都有自己獨立的地址空間,每啟動一個進程,系統就會為它分配地址空間,建立數據表來維護代碼段、堆棧段和數據段。
線程:程序執行的最小單位。
為什么要有線程?
每個進程都有自己的地址空間,即進程空間,在網絡或多用戶換機下,一個服務器通常需要接收大量不確定數量用戶的並發請求,為每一個請求都創建一個進程顯然行不通(系統開銷大響應用戶請求效率低),因此操作系統中線程概念被引進。
進程與線程的區別?
1. 地址空間: 同一進程的所有線程共享本進程的地址空間,而不同的進程之間的地址空間是獨立的。
2. 資源擁有: 同一進程的所有線程共享本進程的資源,如內存,CPU,IO等。進程之間的資源是獨立的,無法共享。
3. 執行過程:每一個進程可以說就是一個可執行的應用程序,每一個獨立的進程都有一個程序執行的入口,順序執行序列。但是線程不能夠獨立執行,必須依存在應用程序中,由程序的多線程控制機制進行控制。
4. 健壯性: 因為同一進程的所以線程共享此線程的資源,因此當一個線程發生崩潰時,此進程也會發生崩潰。 但是各個進程之間的資源是獨立的,因此當一個進程崩潰時,不會影響其他進程。因此進程比線程健壯。
線程執行開銷小,但不利於資源的管理與保護。
進程的執行開銷大,但可以進行資源的管理與保護。進程可以跨機器前移。
進程與線程的選擇取決條件?
因為進程是資源分配的基本單位,線程是程序執行的最小單。以及進程與線程之間的健壯性來考慮。
1. 在程序中,如果需要頻繁創建和銷毀的使用線程。因為進程創建和銷毀開銷很大(需要不停的分配資源),但是線程頻繁的調用只是改變CPU的執行,開銷小。
2. 如果需要程序更加的穩定安全時,可以選擇進程。如果追求速度,就選擇線程。