C 多執行緒程式設計

2021-10-08 16:11:56 字數 687 閱讀 7177

首先給自己提幾個關於多執行緒程式設計的問題:

1、單執行緒和多執行緒的區別?

2、什麼時候要使用多執行緒?

3、我們知道多執行緒可以提高程式執行效率,那是不是執行緒數越多越好?

4、對於3的回答一定是否定的,那麼執行緒數到底設定成多少效率最高?

5、既然我們知道建立多少個執行緒數是合適的,那麼為什麼還要搞乙個執行緒池呢?

6、建立乙個執行緒都要做哪些事情?為什麼說頻繁的建立執行緒開銷很大?

7、多執行緒通常要注意共享變數問題,為什麼區域性變數就沒有執行緒安全問題呢?

那麼下面就來對這些問題進行逐一的解決。

待寫。。。

cpu計算密集型程式

對於cpu密集型程式來說,舉個例子,比如要計算從1加到10億,如果你的cpu核心數是1的話,那麼使用多執行緒反而會降低執行效率,因為執行緒的建立、撤銷和切換都需要開銷資源。假設你的cpu核心數是4核,並且此時只有乙個程式在執行,那麼我們可以把1到10億分成4個部分,分別進行計算,然後再把4部分的計算結果求和,那麼就可以提公升執行的效率。

i/o密集型程式

i/o密集型程式是指程式要頻繁的等待i/o事件,當執行緒等待i/o事件時 ,那麼此時它是要把cpu資源讓給其他執行緒或程序執行,不能讓cpu處於空閒狀態。

那麼肯定不是執行緒數越多越好了,即使你的cpu核心數支援的話,但是你建立執行緒時 ,就會有開銷,還有執行緒之間的切換和cpu在排程執行緒的時候也會有開銷。

C 多執行緒程式設計

一 thread 基礎 程序 當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。執行緒 執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式 方...

C 多執行緒程式設計

乙個程序通常定義為程式的乙個例項。在win32中,程序佔據4gb的位址空間。與它們在ms dos和16位windows作業系統中不同,win32程序是沒有活力的。這就是說,乙個win32程序並不執行什麼指令,它只是佔據著4gb的位址空間,此空間中有應用程式exe檔案的 和資料。exe需要的任意dll...

C 多執行緒程式設計

建立執行緒的函式 handle createthread lpsecurity attributes lpthreadattributes,使用預設安全形態,設為null,表明不可被子執行緒繼承 size t dwstacksize,初始棧大小,預設值0表示使用與呼叫該函式的執行緒相同的棧大小 lp...