單個進程中最大允許的線程數

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, 這個限制作了調整(待研究)

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章