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
[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;
}

[/c]

此条目发表在OS分类目录。将固定链接加入收藏夹。

发表评论