当前位置: 技术问答>linux和unix
多线程并发服务器设计
来源: 互联网 发布时间:2015-11-17
本文导语: 目前准备做一个很大的服务器,希望是能支持万人级同时下载。但是,之前没有做过这么多的并发数。我在google和CSDN查了很多以往的资料,但是都解决不了问题。 为了测试单个进程能支持多少个线程,我写了个测试...
目前准备做一个很大的服务器,希望是能支持万人级同时下载。但是,之前没有做过这么多的并发数。我在google和CSDN查了很多以往的资料,但是都解决不了问题。
为了测试单个进程能支持多少个线程,我写了个测试程序:
#include
#include
#include
#define PTHREAD_THREADS_MAX 20000
void thread(void)
{
char ch[128];
}
int main()
{
pthread_t id;
int i=0, ret;
while(1)
{
ret = pthread_create(&id, NULL, (void * (*)(void *))thread, NULL);
i++;
if (ret != 0)
printf("Max = %d errno=%dn", i-1, errno),perror("create thread"), exit(0);
printf("i=%d pthread_id=%dn", i, id);
}
return 0;
}
当生成了1021个线程过后,程序退出了,错误信息是:
Interrupted system call
我尝试修改/usr/include/loacal_lim.h中的
#define PTHREAD_THREAD_MAX 2048 //原来为1024
#define PTHREAD_KEY_MAX 2048 //原来为1024
同时利用ulimit对一系列限制做了修改,但运行结果都一样,errno=4。
现在请问下高手,
1。interrupted system call是什么错误?
2。怎么在单进程提高并发上限?
3。那些万人级的并发服务器的原理是什么呢?
为了测试单个进程能支持多少个线程,我写了个测试程序:
#include
#include
#include
#define PTHREAD_THREADS_MAX 20000
void thread(void)
{
char ch[128];
}
int main()
{
pthread_t id;
int i=0, ret;
while(1)
{
ret = pthread_create(&id, NULL, (void * (*)(void *))thread, NULL);
i++;
if (ret != 0)
printf("Max = %d errno=%dn", i-1, errno),perror("create thread"), exit(0);
printf("i=%d pthread_id=%dn", i, id);
}
return 0;
}
当生成了1021个线程过后,程序退出了,错误信息是:
Interrupted system call
我尝试修改/usr/include/loacal_lim.h中的
#define PTHREAD_THREAD_MAX 2048 //原来为1024
#define PTHREAD_KEY_MAX 2048 //原来为1024
同时利用ulimit对一系列限制做了修改,但运行结果都一样,errno=4。
现在请问下高手,
1。interrupted system call是什么错误?
2。怎么在单进程提高并发上限?
3。那些万人级的并发服务器的原理是什么呢?
|
YanDong,不知道ACE和TAO,不应该:)
http://www.cs.wustl.edu/~schmidt/ACE.html
http://www.cs.wustl.edu/~schmidt/ACE.html