windows 乙個程序可以允許最大的執行緒數

2022-06-08 03:48:11 字數 694 閱讀 1632

預設情況下,乙個執行緒的棧要預留1m的記憶體空間 

而乙個程序中可用的記憶體空間只有2g,所以理論上乙個程序中最多可以開2048個執行緒 

但是記憶體當然不可能完全拿來作執行緒的棧,所以實際數目要比這個值要小。 

你也可以通過連線時修改預設棧大小,將其改的比較小,這樣就可以多開一些執行緒。 

如將預設棧的大小改成512k,這樣理論上最多就可以開4096個執行緒。 

即使物理記憶體再大,乙個程序中可以起的執行緒總要受到2gb這個記憶體空間的限制。 

比方說你的機器裝了64gb物理記憶體,但每個程序的記憶體空間還是4gb,其中使用者態可用的還是2gb。

如果是同一臺機器內的話,能起多少執行緒也是受記憶體限制的。每個執行緒物件都要站用非頁面記憶體,而非頁面記憶體也是有限的,當非頁面記憶體被耗盡時,也就無法建立執行緒了。 

如果物理記憶體非常大,同一臺機器內可以跑的執行緒數目的限制值會越來越大。  

在windows下寫個程式,乙個程序fork出2000個左右執行緒就會異常退出了,為什麼?

這個問題的產生是因為windows32位系統,乙個程序所能使用的最大虛擬記憶體為2g,而乙個執行緒的預設執行緒棧stacksize為1024k(1m),這樣當執行緒數量逼近2000時,2000*1024k=2g(大約),記憶體資源就相當於耗盡。

如果你的伺服器端程式設計成:來乙個client連線請求則建立乙個執行緒,那麼就會存在2000個限制(在硬體記憶體和cpu個數一定的情況下)。

C 只允許啟動乙個程序

方法一 只禁止多個 程序執行 stathread public static void main else 方法二 禁止多個 程序執行,並當重複執行時啟用以前的 程序 stathread public static void main else public static process runni...

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

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

Windows客戶端開發 只允許有乙個例項執行

沒有人會漫無目的地旅行,那些迷路者是希望迷路。島上書店 所以,今天就跟大家分享一下,如何確保你開發的windows客戶端只能同時執行乙個例項,或是叫程序。使用mutex openmutex函式為現有的乙個已命名互斥體物件建立乙個新控制代碼。即在main函式中建立乙個互斥量 winapi winmai...