高并发的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++写一个线程池呢?我也不知道,再学!