高并发服务器实现方案研究

高并发服务器实现方案研究

ID:41120550

大小:27.50 KB

页数:6页

时间:2019-08-16

高并发服务器实现方案研究_第1页
高并发服务器实现方案研究_第2页
高并发服务器实现方案研究_第3页
高并发服务器实现方案研究_第4页
高并发服务器实现方案研究_第5页
资源描述:

《高并发服务器实现方案研究》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、高并发服务器实现方案研究摘要:讲述并发服务器设计的主要技术,包括多进程服务器、多线程服务器和I/0复用服务器,同时对以上服务器技术的性能进行了简要分析,给出了在Linux操作系统下使用socket实现并发服务器的方法。关键词:并发服务器;多进程;多线程;I/0复用网络服务器是网络软件的核心部分,Linux由于其源码开放,性能稳定,所以在服务器市场中占有的份额越来越多,许多经典的服务器(如wEB服务器)都使用Linux系统。随着网络应用的不断增多,服务器的服务类型也不断增多,而且性能要求越来越高,开发高性能的网络服务器是大势所趋。服务器设计技术有很多,按使用的协议来分有TCP服务器和

2、u)P服务器。按处理方式来分有迭代服务器和并发服务器。一个好的服务器,一般都是并发服务器。并发服务器设计技术一般有:多进程服务器、多线程服务器、I/O复用服务器等。下面,给出了这3种并发服务器的设计与实现。1多进程并发服务器在Linux环境下多进程的应用很多,其中最主要的就是网络/客户服务器。但是在电信、金融等数据量和稳定性要求都比较高的环境中,也会涉及到多进程的应用。多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有请求时,服务器能及时处理客户,特别是在客户服务器交互系统中。对于一个TCP服务器,客户与服务器的连

3、接可能并不马上关闭,可能会等到客户提交某些数据后再关闭,这段时间服务器端的进程会阻塞,所以这时操作系统可能调度其它客户服务进程。比起迭代服务器大大提高了服务性能。1.1多进程服务器传统方法多进程服务器设计方法也很多,传统方法是父进程进行监听(TCP服务器),当有连接到达时,生成一个子进程处理客户请求,之后父进程继续监听。所以有时把父进程称为监听进程。其模板如下:intmain(void){listen(1istenfd,雕屺KLlⅪ);/*listenfd是监听套接字*/while(1){if((connfd=accept(sOckfd,NULL,NULL))==~1){/*错误处

4、理*/}if((pid=f6rk())>0){cbe(connfd);/*父进程关闭客户连接套接字*/conntinue:elseif(pid==0){close(1istenfd);/*子进程关闭监听套接字*/……/*处理客户请求*/close(∞nnfd);eXit(0);}程序需特别注意的地方是父进程要关闭连接套接字,子进程要关闭监听套接字。因为fork以后,子进程是父进程的一个复制品,它们都有监听套接字和连接套接字。如果父进程不关闭连接套接字,当子进程关闭连接套接字时,这个套接字并不会关闭,因为每个套接字描述符都有一个“引用计数”。当fork函数返回后,Iistenfd和c

5、onnfd的引用计数变为2,而系统只有在描述符的“引用计数”为O时,才真正关闭该描述符。子程序退出后,还有一些状态信息留给父进程,父进程应调用waitpid函数清理子进程,因为子进程终止后,它变为一个僵尸进程,父进程如果不清理僵尸进程,随着客户终止数目的增多,僵尸进程越来越多,将耗掉系统资源。清理僵尸进程的一般方法是:让父进程收到SIGCHLD号后调用waitpid函数。代码如下:voidsig—chld(intsigno){pid—tpid;intstat;whiIe((pid=waitpid(一1,&stat,WNOHANG))>0)printf(“child%dtermina

6、ted\n”,pid);return:}程序中sig—chld是一个信号处理程序。当子进程终止时,会向父进程发送一个SIGCHLD信号,所以在父进程中应捕获这个信号。方法可以是:signal(SIGCHLD,sig—chld)。注意程序中用的是waitpid函数,而不是wait函数。原因是多个子进程可能同时终止,这种情况下wait函数只能处理一个子进程。调用waitpid函数可能处理多个已终止子进程。关于waitpid函数的参数可查看linux的帮助文档。这种传统的多进程服务器有很多缺点:(1)消耗系统资源。因为一个进程有自已的地址空间、执行堆栈和文件描述符等。创建进程要复制父进程

7、的执行堆栈、文件描述符等给子进程。所以创建一个进程的系统开销较大。如果处理客户的时间比较短,而客户的连接比较多,这样系统大部分时间都花在创建进程和终止进程,造成了极大的浪费。(2)进程状态难以了解。如果在以上情况下某一个子进程发生了延迟或者其他异常,长期处在等待的状态下,父进程根本无法对如此众多的子进程进行监控,所以就会对子进程无法控制。(3)进程数难以控制。在每次开启子进程时,父进程可以判断是否达到了最大进程数,如果达到了,则需要等待子进程的释放。这样固然可以控制最

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。