- 可被並存執行的指令序列
- 可被作業系統調度處理的最小單元
- 線程也可被理解為輕量的進程
- 通常情況下線程是被包含在進程內
- 一個進程可包含多個線程,常規情況下,這些線程相互之間會共用資源
- 在多核心CPU上線程是的確可以同時啟動並執行,同時啟動並執行線程受核心數量影響
- 在單核CPU上線程是分時啟動並執行,因為足夠快我們感覺不到有什麼問題
線程的一些應用情境
- 處理和執行非同步性質的任務,GUI中通常需要單一Panel下顯示多個即時圖表。
- 運算更快,合理的利用當前已經普及的雙核或多核CPU。
- 非阻塞、定時任務,I/O、調度、定期檢測。
- 並行化,可並行化演算法,如各迴圈分支被分步在不同的CPU上執行,但因為各迴圈的資料有存在依賴的情況所以依據具體情境實施方式也不同。
- 應用程式的響應,使我們產生程式效能非常好的錯覺,但的確使我們工作的更加流暢。
基本概念
- 虛擬記憶體,作業系統對所有可訪問的主儲存資源的抽象
- CPU模式,實模式、保護模式
- 核心空間,CPU保護模式下會對系統自身運行環境進行保護,所以會把虛擬記憶體空間進行分離。核心空間不會參與系統虛擬記憶體管理的換入換出它會常駐記憶體。
- 使用者空間,簡單理解為非核心應用程式的虛擬記憶體空間,參與系統虛擬記憶體管理操作的換入換出,
進程與線程
進程是重量級的系統核心調度單元,它擁有作業系統給它分配的資源,如記憶體、File Handles、device
Handles、sockets。進程一般不共用地址空間和資源,除非通過明確的方法如繼承的資源控制代碼或共用記憶體段。
隨著作業系統發展演化,進程演化為作業系統資源分派和管理的對象,而作業系統調度執行的最小單位演化為線程。
核心線程
- 核心線程是核心調度執行的最小單元
- 每個進程中至少存在一個核心線程
- 如果一個進程允許存在多個核心線程,這些核心線程將共用資源(記憶體、file
Handles)
- 核心線程有自己內部非共用的資源(棧、程式計數器、內部儲存空間)。
- 系統核心為每個邏輯核心分配一個線程,它可以將被阻塞的線程從邏輯核心中交換出去。
- 核心線程需要比使用者線程更多的交換時間。
使用者線程
- 使用者線程運行在使用者空間
- 作業系統通過在使用者空間增加運行庫來支援線程
- 運行庫負責使用者線程的調度執行、建立\銷毀、多個使用者線程間的訊息傳遞、使用者線程上下文管理。
- 核心是不會感知到使用者線程存在,對使用者線程的調度和管理工作都在使用者空間內進行。
- 使用者線程與核心線程的通訊加入了輕型進程(LWP)概念。
- Green Thread是指通過虛擬機器技術實現使用者線程
纖程
- 比進程單位更小、更靈活
- 纖程不參與核心調度
- 纖程的調度執行由所歸屬的應用程式獨立控制
使用者線程、核心線程、輕型進程
1. 使用者線程與核心線程是有映射關係的
2. JVM執行緒模式
- 核心線程在核心空間和使用者空間會有線程映射關係
- JVM在核心空間只有一個核心線程與之對應
- JVM在使用者空間建立的線程依據作業系統可以不同,但也可理解成在使用者空間建立的線程都是使用者級的對核心透明。
查詢資料
- http://en.wikipedia.org/wiki/Thread_(computing)
- http://www.cnblogs.com/gutian98/archive/2009/09/03/1559560.html
- http://www.linuxforum.net/forum/showflat.php?Board=linuxK&Number=451275
- http://zhidao.baidu.com/question/198207122.html
- Java Thread 3th
- 使用者線程
- 邏輯地址\線性地址\虛擬位址
- 核心線程與使用者線程
- 核心線程與使用者線程關係
- http://www.baidu.com