關於程序和執行緒

2022-07-02 18:24:12 字數 1650 閱讀 1719

什麼是程序。最直觀的就是乙個個 pid, 官方的說法就:程序是程式在計算機上的一次執行活動。執行緒是可執行**的可分派單元。這個名稱**於 「 執行的線索 」 的概念。在基於執行緒的多工的環境中,所有程序有至少乙個執行緒,但是它們可以具有多個任務。這意味著單個程式可以併發執行兩個或者多個任務。

1.概念

程序:正在執行中的程式。

執行緒:程序中的一條執行路徑。

2.區別

(1)通常在乙個程序中可以包含若干個執行緒,它們可以利用程序所擁有的資源。在引入執行緒的作業系統中,通常都是把程序作為分配資源的基本單位,而把執行緒作為獨立執行和獨立排程的基本單位。

(2)執行緒和程序的區別在於,子程序和父程序有不同的**和資料空間,而多個執行緒則共享資料空間,每個執行緒有自己的執行堆疊和程式計數器為其執行上下文。多執行緒主要是為了節約cpu時間,發揮利用,根據具體情況而定。執行緒的執行中需要使用計算機的記憶體資源和cpu。

(3)程序間相互獨立,同一程序的各執行緒間共享。某程序內的執行緒在其它程序不可見。

(4)執行緒的上下文切換遠大於程序間上下文切換的速度。

(5)程序是不可執行的實體,程式是乙個沒有生命的實體,只有當處理器賦予程式生命時,它才能成為乙個活動的實體,我們稱其為程序。

3.執行緒和程序的關係以及區別?

程序和執行緒的關係:

(1)乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒,但至少有乙個執行緒。

(2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。

(3)處理機分給執行緒,即真正在處理機上執行的是執行緒。

(4)執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。執行緒是指程序內的乙個執行單元,也是程序內的可排程實體.

程序與執行緒的區別:

(1)排程:執行緒作為排程和分配的基本單位,程序作為擁有資源的基本單位

(2)併發性:不僅程序之間可以併發執行,同乙個程序的多個執行緒之間也可併發執行

(3)擁有資源:程序是擁有資源的乙個獨立單位,執行緒不擁有系統資源,但可以訪問隸屬於程序的資源.

(4)系統開銷:在建立或撤消程序時,由於系統都要為之分配和**資源,導致系統的開銷明顯大於建立或撤消執行緒時的開銷。 

【qps】

qps(query per second),qps 其實是衡量吞吐量(throughput)的乙個常用指標,就是說伺服器在一秒的時間內處理了多少個請求 —— 我們通常是指 http請求,顯然數字越大代表伺服器的負荷越高、處理能力越強。併發使用者數 是指系統可以同時承載的正常使用系統功能的使用者的數量。

【伺服器負載過高的解決方案】

top命令查詢伺服器負載達到2.0-5之間,nginx的cpu使用率達到104%

問題分析過程:

(1)df -h 命令,檢視磁碟是否是否超出正常範圍

(2)free 命令,檢視記憶體使用率是否超出正常範圍

問題引出:如何確定nginx的100%的cpu使用率到底問題在哪?

ps -ef | grep nginx 查詢出nginx的程序pid(eg:8209)

ps -aux | grep nginx 查詢出該程序是哪個使用者啟動的(即使root使用者可能也匯出執行緒快照失敗)

su root 切換到程序啟動使用者

關於程序 執行緒

程序 家庭,家庭間資料獨立 位址獨立,通訊必須通過核心排程 執行緒 家庭成員,家庭成員間資料共享 一.程序間通訊 ipc 管道 有名管道 訊息佇列 訊號量 共享記憶體 訊號 套接字 網路通訊 2.訊號量 類似計數器,處理程序或執行緒同步問題,特別是對臨界資源 某一時刻只能由乙個程序或執行緒操作的資源...

關於執行緒和程序的使用

最近在研究android自動化測試,為了減小log日誌,每次迴圈執行之後清空日誌,在迴圈體中使用執行緒,如下 new thread new runnable catch ioexception e catch interruptedexception e start thread.interrupt...

關於多執行緒和多程序

關於多執行緒和多程序 假設 條件一 需要在10個省都各建造一條鐵路 程式 條件二 每個省都有五支施工隊 多核cpu 條件三 鐵路建造獲取控制中心發布開始時間 程式發布命令 條件四 全部物料最多 20個施工隊同時開工 計算機效能上限 方案一 控制中心命令第乙個省的乙個施工隊開始施工,完成後再命令第二個...