單個程序中最大允許的執行緒數

2021-08-21 09:11:02 字數 896 閱讀 8495

1.      與系統資源相關,即執行緒棧的大小

a)        執行緒棧預設大小可以通過『ulimit -s』檢視,通常這個值是8m。如果使用者修改了該值,則可以檢視』/proc/self/limits』獲取該程序相應的值 (其實是需要考慮執行緒棧和guard page的size)

b)       在32系統上使用者空間大小為3g,3 * 1024 / 8 ~= 384

c)        程式其他資料需要占用一部分記憶體空間,則384 – 1 = 383; 程序中還包含乙個主線程,則 383 – 1 = 382; linuxthreads 還需要乙個管理執行緒, 則382 – 1 = 381

d)       可以通過縮減棧的大小來上調單個程序的最大的執行緒數。

i.             ulimit –s 設定系統預設的棧大小

ii.             呼叫 pthread_create 的時候用 pthread_attr_getstacksize 設定乙個較小的棧大小

2.      glibc設定相關

a)        老版本的glibc中會通過「/usr/include/bits/local_lim.h 」中的」pthread_threads_max」控制單個程序中最大的執行緒數,即使棧再小,執行緒的個數也不能超過這個限制的值;除非重新編譯glibc;

b)       新版本的glibc, 這個限制作了調整(待研究)

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

預設情況下,乙個執行緒的棧要預留1m的記憶體空間 而乙個程序中可用的記憶體空間只有2g,所以理論上乙個程序中最多可以開2048個執行緒 但是記憶體當然不可能完全拿來作執行緒的棧,所以實際數目要比這個值要小。你也可以通過連線時修改預設棧大小,將其改的比較小,這樣就可以多開一些執行緒。如將預設棧的大小改...

迴圈圈中最大的數

如果把乙個正整數的每一位都平方後再求和,得到乙個新的正整數。對新產生的正整數再做同樣的處理。如此一來,你會發現,不管開始取的是什麼數字,最終如果不是落入1,就是落入同乙個迴圈圈。請寫出這個迴圈圈中最大的那個數字。請填寫該最大數字。注意 你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。無 ...

C 程序中最大執行緒建立數量分析

thread th newthread opthread th.isbackground true th.start private void opthread catch system.exception ex finally region 最大執行緒測試 list lstthread new l...