32为linux系统最大内存地址4G,0-3GB的给用户进程(User Space)使用,3-4GB给内核使用
stack size (kbytes, -s) 10240表示线程堆栈大小
3G/10M=最大线程数,但实际会比这个数小一点,因为程序本身占内存,还有些管理线程
可以使用ulimit -s来设置stack size,设置的小一点开辟的线程就多。
同时/usr/include/bits/local_lim.h中的PTHREAD_THREADS_MAX限制了进程的最大线程数
/proc/sys/kernel/threads-max中限制了系统的最大线程数
你自己写个简单的代码就能测试出自己系统最大可以开多少线程
#include
#include
#include
#include
void *foo(void *param)
{
}
int main()
{
int i = 0;
pthread_t thread;
while(1)
{
if(pthread_create(&thread,NULL,foo,NULL) != 0)
break;
i++;
}
printf("i=%d\n",i);
return 0;
}