現代作業系統os引入了多工的概念,傳統上多工的實現是多程序完成的。支援多工就涉及到程序的切換,也就意味著程序上下文的切換。
如果我們程序有很多,多程序的頻繁切換,每次上下文切換都要做這些事,還是很耗資源的,我們想用一種機制能減少程序切換帶來的資源消耗,所以很多作業系統中都引入了輕量級的程序的概念。也稱之為執行緒。
注意:上下文切換,上下文的意思是,我們執行乙個程序所需要的資源。那就有記憶體,快速快取,pc指標等等。切換上下文就是替換原先的內容,從某中角度去看需要切換task_struct結構以及虛擬記憶體空間。
執行緒(thread),被稱為輕量級程序(lightweight process lwp)。是程式執行排程的最小單位。在傳統的系統中,乙個程序只包含有乙個執行緒。但在現代作業系統中,允許乙個程序裡面可以同時執行多個執行緒,這類程式就被稱為多執行緒程式。乙個程序內的各個執行緒之間共享程式的記憶體空間以及其他的資源(如開啟的檔案和訊號等)。
linux實現執行緒的機制非常特別,從核心角度來說並沒有執行緒的概念,linux將執行緒僅僅視作乙個與其他程序共享某些資源的特殊程序。所以linux並沒有特別的資料結構來描述執行緒,依然沿用task_struct結構來描述執行緒。
注意:
執行緒就理解為乙個執行者,它沒有資源(執行緒是cpu排程的最小單位)。程序概念上是資源的宿主(程序是資源分配的最小單位)。linux上的理念是大家都是執行者,資源共享。
1.4.1相同點
1.4.2 不同點1.5.1 檢視執行緒
ps 命令,-l引數顯示程序,並盡量顯示其lwp(執行緒id)和nlwp(執行緒的個數)。
1.5.2 pstree命令
檢視程序和執行緒的樹形結構關係:
pstree -p | grep syslog
注意:多執行緒運用了第三方庫,因此在編譯時,要加-lpthread 。(new posix thread library,nptl庫)。(也就是說標準c庫,以及系統庫中都沒有提供 執行緒的庫,我們所使用的執行緒庫是第三方庫。)
1.8.1 乙個程序中的多個執行緒共享以下資源
1.8.2 每個執行緒私有的資源如下
多執行緒基礎(一)執行緒建立
繼承thread類 自定義乙個類,繼承thread類 重寫run方法,run方法中用於定義當前執行緒的執行邏輯。建立執行緒類的物件 開啟執行緒 thread類中start 方法啟動執行緒 此案例展示第一種建立執行緒之方法 繼承thread類 說明 1.若 static 修飾 i,則共享i 關於thr...
QT執行緒(一) 執行緒類
執行緒之間共享資料,但又單獨執行 qt執行緒 qthread 是平台無關的 通常主線程從 main 開始執行,而在主線程中建立其他執行緒,其他執行緒派生於 qthread 1 執行緒優先順序總共8 個優先順序 執行緒優先順序從上到下越來越高。constant value description qt...
QT執行緒(一) 執行緒類
執行緒之間共享資料,但又單獨執行 qt執行緒qthread是平台無關的 通常主線程從main開始執行,而在主線程中建立其他執行緒,其他執行緒派生於qthread 1 執行緒優先順序 總共8個優先順序 執行緒優先順序從上到下越來越高。constant value description qthread...