1、程式與執行緒的概念
來源百度百科:
- 程式(Process) 是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。 在當代面向執行緒設計的計算機結構中,程式是執行緒的容器。程式是指令、資料及其組織形式的描述,程式是程式的實體。是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。程式是指令、資料及其組織形式的描述,程式是程式的實體。
- 執行緒(thread) 是作業系統能夠進行運算排程的最小單位。它被包含在程式之中,是程式中的實際運作單位。一條執行緒指的是程式中一個單一順序的控制流,一個程式中可以併發多個執行緒,每條執行緒並行執行不同的任務。
2、什麼是程式管理
- 到底什麼是程式呢?
程式是正在執行的一個程式或命令,每一個程式都是一個執行的實體,都有自己的地址空間,並佔用一定的系統資源。 - 那麼什麼是程式呢?
程式是人使用計算機語言編寫的可以實現特定目標或解決特定問題的程式碼集合。 - 那我們換一種說法:
- 程式是人使用計算機語言編寫的,可以實現一定功能,並且可以執行的程式碼集合。
- 程式是正在執行中的程式。程式被執行時,執行人的許可權和屬性、以及程式的程式碼都會被載入如記憶體,作業系統給這個程式分配一個ID號,我們成為PID(程式ID)
3、程式管理的作用
- 判斷伺服器健康狀態:運維工程師最主要的工作就是保證伺服器安全穩定的執行。理想的狀態是,在伺服器出現問題,但是還沒有造成伺服器當機或停止服務時,就人為干預解決了問題。程式管理最主要的工作就是判斷伺服器當前執行是否健康,是否需要人為干預。如果伺服器的CPU佔用率、記憶體佔用率過高,就需要人為介入解決問題了。
- 檢視系統中所有的程式:我們需要檢視系統中所有正在執行的程式,通過這些程式可以判斷系統中執行了哪些服務,是否有非法服務執行。
- 殺死程式:這是程式管理中最不常用的手段,當我需要停止服務時,會通過正確關閉命令來停止服務(如
apache
服務可以通過service httpd stop
來關閉)。只有當正確終止程式的手段失效的情況下,才會考慮使用kill
命令殺死程式(你不是殺手,不要什麼程式都用kill來終止,否則非常容易導致伺服器崩潰)
4、Linux程式的幾種狀態
D
:不可被喚醒的睡眠狀態,通常用於I/O
情況。R
:該程式正在執行。S
:該程式在睡眠狀態,可被喚醒。T
:停止狀態,可能是在後臺暫停或程式在除錯狀態。W
:記憶體互動狀態(從2.6核心開始無效)。X
:死掉的程式(應該不會出現)。Z
:殭屍程式。程式已經終止,但是部分程式還在記憶體當中。<
:高優先順序(以下狀態在BSD格式當中出現)。N
:低優先順序。L
:被鎖入記憶體。s
:包含子程式。l
:多執行緒(小寫L)。+
:位於後臺。
5、程式與執行緒的關係
(1)執行緒與程式的關係
比如電腦同時進行著200個程式:
- 執行緒與程式概念
- 執行緒: 每個程式中至少包含一個執行緒,而這些執行緒都在共享程式的資源空間等,當執行緒發生變化的時候只會引起CPU執行的過程發生變化,不會改變程式所擁有的資源。同理一個程式中至少包含一個程式。程式中執行運算的最小單位,亦是執行處理機排程的基本單位
- 程式: 每個程式都有自己的地址空間,資源如,記憶體,I/O,CPU,同一個程式裡的 執行緒共享本程式裡的地址空間,那能不能使用別人家程式的地址空間呢,顯然這是不可以的。由於程式的獨立性,當某一個程式崩潰之後,在保護模式下不會對別的程式進行影響。資源分配的基本單位,執行排程的基本單位,系統中併發執行的單位。
- 兩者的比較
- 排程
同一個程式中,執行緒的切換不會引起程式的切換。
由一個程式的執行緒切換到另一個執行緒的程式時,引起程式的切換。 - 併發性
程式可以併發執行,而一個程式中的執行緒也可以併發執行。 - 擁有的資源
一般來說,執行緒並不會擁有自己的資源,但是它可以訪問自己本程式中的資源。比如,一個程式開啟的檔案等,程式中的其他執行緒是可以共享的。
- 排程
(2)總結
我們簡單總結下:
- 程式:指在系統中正在執行的一個應用程式,程式一旦執行就是程式,程式是資源分配的最小單位。
- 執行緒:系統分配處理器時間資源的基本單元,或者說程式之內獨立執行的一個單元執行流,執行緒是程式執行的最小單位。
參考: