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

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, 这个限制作了调整(待研究)

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值