說到線程就不得說進程。進程 進程對應一個程式,每個進程對應一定的記憶體地址空間,並且只能使用它自己的記憶體空間,各個進程間互不幹擾。並且進程保存了程式每個時刻的運行狀態,這樣就為進程切換提供了可能。當進程暫時時,它會保存當前進程的狀態(比如進程標識、進程的使用的資源等),在下一次重新切換回來時,便...
說到線程就不得說進程。
- 進程
進程對應一個程式,每個進程對應一定的記憶體地址空間,並且只能使用它自己的記憶體空間,各個進程間互不幹擾。並且進程保存了程式每個時刻的運行狀態,這樣就為進程切換提供了可能。當進程暫時時,它會保存當前進程的狀態(比如進程標識、進程的使用的資源等),在下一次重新切換回來時,便根據之前保存的狀態進行恢復,然後繼續執行。這就是併發,能夠讓操作系統從巨集觀上看起來同一個時間段有多個任務在執行。換句話說,進程讓操作系統的併發成為了可能。
註意,雖然併發從巨集觀上看有多個任務在執行,但是事實上,任一個具體的時刻,只有一個任務在占用CPU資源(當然是對於單核CPU來說的)。
- 線程
線程,讓一個線程去執行進程一個子任務,這樣一個進程就包括了多個線程,每個線程負責一個獨立的子任務,讓用戶感覺是同時在做多件事情的,滿足了用戶對實時性的要求。換句話說,進程讓操作系統的併發性成為可能,而線程讓進程的內部併發成為可能。
註意,一個進程雖然包括多個線程,但是這些線程是共同享有進程占有的資源和地址空間的。進程是操作系統進行資源分配的基本單位,而線程是操作系統進行調度的基本單位。
由於多個線程是共同占有所屬進程的資源和地址空間的,那麼就會存在多個線程要同時訪問某個資源的同步問題,這就是線程同步問題。
- 線程與進程的區別歸納:
a.地址空間和其它資源:進程間相互獨立,同一進程的各線程間共用。某進程內的線程在其它進程不可見。
b.通信:進程間通信IPC,線程間可以直接讀寫進程數據段(如全局變數)來進行通信——需要進程同步和互斥手段的輔助,以保證數據的一致性。
c.調度和切換:線程上下文切換比進程上下文切換要快得多。
d.在多線程OS中,進程不是一個可執行的實體。