单个进程中最大允许的线程数

1.      与系统资源相关,即线程栈的大小

 单个进程中最大允许的线程数_第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, 这个限制作了调整(待研究)

 

单个进程中最大允许的线程数_第2张图片


你可能感兴趣的:(Linux,System,编程)