程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Windows系統中一個進程可以允許最大的線程數

Windows系統中一個進程可以允許最大的線程數

編輯:Delphi

默認情況下,一個線程的棧要預留1M的內存空間

而一個進程中可用的內存空間只有2G,所以理論上一個進程中最多可以開2048個線程

但是內存當然不可能完全拿來作線程的棧,所以實際數目要比這個值要小。

你也可以通過連接時修改默認棧大小,將其改的比較小,這樣就可以多開一些線程。

如將默認棧的大小改成512K,這樣理論上最多就可以開4096個線程。

即使物理內存再大,一個進程中可以起的線程總要受到2GB這個內存空間的限制。

比方說你的機器裝了64GB物理內存,但每個進程的內存空間還是4GB,其中用戶態可用的還是2GB。

如果是同一台機器內的話,能起多少線程也是受內存限制的。每個線程對象都要站用非頁面內存,而非頁面內存也是有限的,當非頁面內存被耗盡時,也就無法創建線程了。

如果物理內存非常大,同一台機器內可以跑的線程數目的限制值會越來越大。

在Windows下寫個程序,一個進程Fork出2000個左右線程就會異常退出了,為什麼?這個問題的產生是因為windows32位系統,一個進程所能使用的最大虛擬內存為2G,而一個線程的默認線程棧StackSize為1024K(1M),這樣當線程數量逼近2000時,2000*1024K=2G(大約),內存資源就相當於耗盡。如果你的服務器端程序設計成:來一個client連接請求則創建一個線程,那麼就會存在2000個限制(在硬件內存和CPU個數一定的情況下)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved