1. 程式人生 > >Linux下一個程序究竟會有多少個執行緒

Linux下一個程序究竟會有多少個執行緒

最近,在做一個關於聊天伺服器的專案,其中遇到了一個問題,那就是一個程序可以產生多少個執行緒呢?

開始各種想象,會和不同平臺,不同系統相關,網上很多大佬說是1024個,也有256個。

與其無端猜測,不如動手測試一下。在Linux32位平臺,進行測試。

  1 #include <stdio.h>
  2 #include <unistd.h>
  3 #include <iostream>
  4 #include <stdlib.h>
  5 #include <string.h>
  6 #include <pthread.h>
  7 #include <errno.h>
  8 
  9 using namespace std;
 10 //測試一個程序可以啟動多少個執行緒???
 11 
 12 void *thread_function(void *arg);
 13 
 14 char message[] = "Hello world";
 15 
 16 int main()
 17 {
 18     int res;
 19     pthread_t a_thread;
 20     int i = 0;
 21     
 22     while( 1 )
 23     {
 24         //建立執行緒
 25         res = pthread_create(&a_thread, NULL, thread_function, (void *)messa    ge);
 26         i++;
 27         if( res != 0)
 28         {
 29             cout<<"執行緒個數:"<<i<<endl;
 30             perror("Thread creation failed;errno:");
 31             return 0;
 32         }
 33     }
 34 }
 35 
 36 void *thread_function(void *arg)
 37 {
 38     printf("thread_function is runing.Argument is %s\n", (char*)arg);
 39 }


可能看著會有些粗糙,但是多次測試下來,可以產生304左右個執行緒。

32位Linux平臺下,虛擬記憶體空間4G,使用者空間佔3G,核心空間1G,每個執行緒的棧大小10240,為10M,3072/10=307。除去主執行緒,下來接近測試資料。

通過命令  ulimit -s或者ulimit -a 可以檢視預設棧大小

當然你可以通過命令ulimit -s+引數,臨時修改執行緒棧大小


執行緒棧修改之後,執行緒個數增加了。