實驗 乙個程序到底能建立多少執行緒?

2021-07-25 05:15:50 字數 887 閱讀 8646

from:

在網上看到有朋友討論,乙個程序能建立的執行緒的最大數量,我學習了一下,做了這個小實驗。

理論上,乙個程序可用虛擬空間是2g,預設情況下,執行緒的棧的大小是1mb,所以理論上最多只能建立2048個執行緒。如果要建立多於2048的話,必須修改編譯器的設定。怎麼設定呆會兒再說。

在vc下寫了乙個控制台程式,目的很簡單,就是建立4500個線程程

**如下:

#include

#include

#include

handle hprocess;

handle hthread;

dword winapi athread( void )    //執行緒函式

bool createthread( int threadnum )    //引數表示建立的執行緒數

else

}return true ;

}int main()

為了不影響效能,執行緒不做任何操作,等待程序終止,在程序沒有終止之前,,建立好的執行緒始終被掛起。

預設情況下,在我的機子上,建立到2024個程序時提示錯誤。

現在來講如何設定棧的大小。我用的是vc2005。

選單欄的「專案」->「***屬性」,選擇「配置屬性」下的「鏈結器」下的「系統」,將堆疊保留大小設定為:524288,這個值就是512kb,這裡的單位是位元組,所以要自己換算,這樣理論上能建立4096個程序。

再次編譯,執行,這個時候建立到了4031個執行緒時失敗,大約是原來的兩倍,因為主線程要占用一定的記憶體,這個結果是正常的。

結論是:乙個程序可以建立的執行緒數由可用虛擬空間和執行緒的棧的大小共同決定,只要虛擬空間足夠,那麼新執行緒的建立就會成功。如果需要建立超過2k以上的執行緒,減小你執行緒棧的大小就可以實現了,雖然在一般情況下,你不需要那麼多的執行緒。

乙個程序可以建立多少執行緒

理論上,乙個程序可用虛擬空間是2g,預設情況下,執行緒的棧的大小是1mb,所以理論上最多只能建立2048個執行緒。如果要建立多於2048的話,必須修改編譯器的設定。include include includehandle hprocess handle hthread dword winapi a...

乙個程序最多能包含多少執行緒

小watch水平有限,希望大家多多指正文中的錯誤,共同進步 最近在學習os的多執行緒課程,第乙個實驗室關於windows的多執行緒,用mfc實現。實驗蠻簡單的,但是,我不由想到了,乙個程序最多能包含多少個執行緒。在網上查了查,貌似也沒找到多少這方面的資料。大部分都是關於伺服器多執行緒鏈結sever的...

乙個程序最多能開多少個執行緒?

在x86平台32位系統,系統占用2gb位址空間,使用者方式2gb。如果使用vs,鏈結程式開關 sack 或者 f可以設定執行緒堆疊大小,預設分配乙個執行緒的堆疊大小是1mb,當createthread引數的stacksize大小與鏈結程式設定的不一致時,採用的方法是誰大用誰的,所以用4kb修改當然不...