線程從屬于進程,是程序的實際執行者,一個進程至少包含一個主線程,也可以有更多的子線程,線程擁有自己的棧空間。
操作系統中的進程和線程對操作系統而言,線程是最小的執行單元,進程是最小的資源管理單元。無論是進程還是線程,都是由操作系統所管理的。
線程的狀态線程具有五種狀态:初始化、可運行、運行中、阻塞、銷毀
1. 進程是CPU資源分配的基本單位,線程是獨立運行和獨立調度的基本單位(CPU上真正運行的是線程)。
2. 進程擁有自己的資源空間,一個進程包含若幹個線程,線程與CPU資源分配無關,多個線程共享同一進程内的資源。
3. 線程的調度與切換比進程快很多。
進程、線程、協程的對比協程既不是進程也不是線程,協程僅僅是一個特殊的函數,協程與進程和線程不是一個維度的。
一個進程可以包含多個線程,一個線程可以包含多個協程。
一個線程内的多個協程雖然可以切換,但是多個協程是串行執行的,隻能在一個線程内運行,沒法利用CPU多核能力。
協程與進程一樣,切換是存在上下文切換問題的。
上下文切換進程的切換者是操作系統,切換時機是根據操作系統自己的切換策略,用戶是無感知的。進程的切換内容包括頁全局目錄、内核棧、硬件上下文,切換内容保存在内存中。進程切換過程是由“用戶态到内核态到用戶态”的方式,切換效率低。
線程的切換者是操作系統,切換時機是根據操作系統自己的切換策略,用戶無感知。線程的切換内容包括内核棧和硬件上下文。線程切換内容保存在内核棧中。線程切換過程是由“用戶态到内核态到用戶态”, 切換效率中等。
協程的切換者是用戶(編程者或應用程序),切換時機是用戶自己的程序所決定的。協程的切換内容是硬件上下文,切換内存保存在用戶自己的變量(用戶棧或堆)中。協程的切換過程隻有用戶态,即沒有陷入内核态,因此切換效率高。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!