高並發的C ++程序,有一個問題就是 最多能有多少線程數?本以為Linux下會有ulimit的限制呢,看了看,沒有。可能對於線程數 還真沒有限制,比如進程好像是65535個進程數吧(PID的范圍);所以寫個小程序來看看Linux下C/C++能開多少線程數。
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAX_TEST_THREAD 500000
void * handle(void *data){
sleep(100);
pthread_exit(NULL);
}
int main(){
pthread_t pid;
int i=0;
printf("Now %d threads will be create!\n",MAX_TEST_THREAD);
for(;i<MAX_TEST_THREAD;i++){
pthread_create(&pid,NULL,handle,NULL);
}
printf("Thread have been created!\n");
sleep(1);
exit(0);
}
五萬個線程創建時間大約有1-2秒,根據各個計算機配置不同,這個值可能也不同的。50萬大約十秒多(關於時間,我是自己估算的,沒有寫到程序中,只是臨時測試而已)。100萬大約20秒多。
所以在高並發的程序中,線程的創建和銷毀會費時間的。所以就有了線程池的概念。
如何用C/C++寫一個線程池呢?我也不知道,再學!