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

2021-06-10 09:04:47 字數 1304 閱讀 9525

//小watch水平有限,希望大家多多指正文中的錯誤,共同進步

最近在學習os的多執行緒課程,第乙個實驗室關於windows的多執行緒,用mfc實現。實驗蠻簡單的,但是,我不由想到了,乙個程序最多能包含多少個執行緒。

在網上查了查,貌似也沒找到多少這方面的資料。大部分都是關於伺服器多執行緒鏈結sever的,關於本機可執行exe的程序數倒是沒有什麼涉及。

我覺得唯一乙個有用的出處:

中間有一句:個人認為是這樣的:每個程序是有4g的記憶體空間,其種只有一部分是給使用者使用的,其餘是核心使用的,具體多少跟作業系統有關。程序中的所有執行緒公用這一空間。每個執行緒又自己的堆疊,再win2k下,如果用vc寫程式的話,你能使用的位址空間約為2g,,執行緒的預設堆疊是1m,可以在編譯程式時修改。因此可以推算乙個程序的執行緒數也就兩千多個。

機器配置:虛擬機器 +xp  +1g記憶體

廢話不多說,直接上圖。

主要用乙個全域性變數 i 標識下,並在i%1000 == 0,時,用getchar()中斷下。

出來的結果並不是我想像中的那樣子。

可以看到pid變得非常非常大,這也讓我的機器變得特別卡,這個原因可能就是之前的程式中,建立的執行緒對應的控制代碼被大量占用,但卻沒有被釋放。

但是,這和我想要的結果相差很多,再檢查,發現執行緒是void,執行完io操作後,直接就退出掛起了。於是改動如下:

ok,這下應該差不多了。。執行

然後到這裡,我的虛擬機器完全卡住了~~   ⊙﹏⊙b汗

再等一會。。

直接不響應了!!

好吧,到這邊,基本上,可以總結下了。

1.程序中,執行緒的**執行完直到返回,執行緒的生命週期基本就算結束了,之後不會占用cpu。但是如果用於標識的執行緒控制代碼不釋放的話,那麼之後執行其它程序時分配的pid就會特別大,計算機也會變得特別卡。

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

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

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

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

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

from 在網上看到有朋友討論,乙個程序能建立的執行緒的最大數量,我學習了一下,做了這個小實驗。理論上,乙個程序可用虛擬空間是2g,預設情況下,執行緒的棧的大小是1mb,所以理論上最多只能建立2048個執行緒。如果要建立多於2048的話,必須修改編譯器的設定。怎麼設定呆會兒再說。在 下寫了乙個控制台...