有關執行緒與程序的基礎與理解

2021-05-21 19:59:24 字數 1274 閱讀 1834

1.執行緒是執行執行緒的簡稱,執行緒函式是執行緒的乙個執行事實,執行緒函式的執行期,也就是該執行緒的生命期。

process database(pdb):程序資料結構;

module database(mdb):模組資料結構;

thread local storage(tls):執行緒區域性儲存;

thread database(tdb):執行緒資料結構。

3.模組:系統構建的乙個用來管理**,資料,資源的一種資料結構。

4.windows如何載入乙個應用程式?

當windows載入器將程式載入到記憶體中,kernel32挖出一些記憶體,構建出乙個pdb,乙個tdb,乙個以上的mdbs(視程式使用dll的多少而定)。針對tdb,作業系統又要產生出memory context,訊息佇列,控制代碼表,環境資料結構(edb),當這些系統內部資料結構都構建完畢,指令指位器(instruction pointer)移到程式的進入點,才開始程式的執行。

5.執行緒優先順序問題?

執行緒的「父親大人」(程序)擁有所謂的優先順序等級,可以在createprocess的引數中設定。執行緒基本上繼承自其父程序的優先順序,然後加上createthread引數中的微調差額(-2~+2),獲得的結果便是執行緒所謂的基本優先順序,範圍從0~31,數值大則優先順序高。::setthreadpriority是調整優先順序的工具,它所指定的也是微調差額(-2~+2)。

6.執行緒的凍結問題?

可以用::suspendthread強制凍結乙個執行緒(::resumethread可以解除凍結)。執行緒會被凍結,表示這個執行緒「要去抓取訊息,而執行緒所附帶的訊息佇列中卻沒有訊息」。如果乙個執行緒完全和ui(使用者介面)沒有關係,並不表示這個執行緒沒有訊息佇列,只是它的程式**中沒有訊息迴圈,這種執行緒叫worker thread(工作者執行緒)。正因為它沒有訊息迴圈的**,所以它不可能被凍結。如果某個執行緒呼叫::getmessage而其訊息佇列卻是空的,這個執行緒便被凍結,知道再有訊息進來為止。凍結的意思就是不管你的執行緒優先順序多高,暫時退出cpu的排程行列。

7.worker thread與ui thread的差別》

從windows作業系統的角度來看,執行緒就是執行緒,並沒有不同,不需要分類,但從mfc角度看,分為工作者執行緒和使用者介面執行緒。但是要注意,執行緒本來就帶有訊息佇列,而如果執行緒程式**中帶有乙個訊息迴圈,就稱為ui thread。

8.有關視窗管理的問題?

為程式中每乙個視窗產生乙個執行緒,負責視窗行為是錯誤的認識。因為子視窗一旦切換,上述做法會導致執行緒也切換,而執行緒的切換要花費大量的系統資源。比較好的做法是把所有ui操作都集中在主線程中,其他的純粹計算的工作才考慮交割工作者執行緒去做。

程序與執行緒理解

程序和執行緒簡單而基本靠譜的定義如下 程序 程式 在資料集上的一次執行,資源分配的基本單位 執行緒 程式的一部分 塊,某個模組 在資料集上的一次執行,cpu的基本排程單位 一些例子概念理解 cpu ram 各種資源 比如顯示卡,光碟機,鍵盤,gps,等等外設 構成我們的電腦,但是電腦的執行,實際就是...

程序與執行緒的理解

程序是乙個實體。每乙個程序都有它自己的位址空間,一般情況下,包括文字區域 text region 資料區域 data region 和堆疊 stack region 文字區域儲存處理器執行的 資料區域儲存變數和程序執行期間使用的動態分配的記憶體 堆疊區域儲存著活動過程呼叫的指令和本地變數。程序是乙個...

如何理解程序與執行緒

程序 process 和執行緒 thread 是作業系統的基本概念,但是它們比較抽象,不容易掌握。最近,我讀到一篇材料,發現有乙個很好的模擬,可以把它們解釋地清晰易懂。1.計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2.假定工廠的電力有限,一次只能供給乙個車間使用。也就...