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


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

一、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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM