64位linux下单个进程的最大线程数

32位系统下的单个进程的最大线程数受限于3G的虚拟内存限制,所以能起的线程最多就1024*3/8=384个。
那么64位的系统是不是就没有限制了呢?实际上64位系统的情况就比较复杂了,有很多限制条件。。
比如/proc/sys/kernel/pid_max 设置的 pid的最大值(默认32768); /proc/sys/kernel/threads-max 设置的最大线程数(默认32128)。
/proc/sys/vm/max_map_count(默认65530)设置最大的内存映射区域数量。
另外就是 /proc/sys/vm/overcommit_memory 和/proc/sys/vm/overcommit_ratio 也有些关系。

max_thread.c

  
#include<stdio.h>  
#include <pthread.h>  
#include <unistd.h>  
#define MAX 40000  
void *sleep1k(void){  
sleep(1000);  
return NULL;  
}  
int main()  
{  
int i = 0;  
pthread_t thread;

while (1) {  
if (pthread_create(&thread, NULL,(void *)sleep1k, NULL) != 0){  
break;  
}  
i ++;  
if(i >=MAX) {  
break;  
}  
}  
printf("i = %d\n", i);  
getchar();  
return 0;  
}