1. 程式人生 > >Linux下一個進程可以開多少線程

Linux下一個進程可以開多少線程

方法 pri print linux bytes 32位 main.c linux系統 eat

這個問題,整理了一下網上的資料,結果如下:

一、ulimit -n可以查看一個進程最多可以打開多少文件描述符數;

二、一個進程最多可以產生多少線程,可用如下的方法:

  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中限制了系統的最大線程數

查看公司的服務器:

限制數為: 2^19
實際測試結果:2^16

三、最靠譜的方法還是自己寫程序測試的結果

#include<unistd.h>
#include<stdlib.h>
#include<pthread.h>
#include<stdio.h>

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

  編譯命令如下:

g++ main.cpp -o main -lpthread

  執行結果:

[root@localhost]# ./main
i = 32747

  

Linux下一個進程可以開多少線程