多进程多线程并发服务器

多进程多线程并发服务器

ID:27415767

大小:462.51 KB

页数:69页

时间:2018-12-02

多进程多线程并发服务器_第1页
多进程多线程并发服务器_第2页
多进程多线程并发服务器_第3页
多进程多线程并发服务器_第4页
多进程多线程并发服务器_第5页
资源描述:

《多进程多线程并发服务器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第5章并发服务器目录服务器分类进程与线程多进程服务器多线程服务器并发服务器服务器分类按连接类型分类面向连接的服务器(如tcp)面向无连接的服务器(如udp)按处理方式分类迭代服务器并发服务器迭代服务器vs.并发服务器绑定地址监听连接接收连接处理连接断开连接接收请求处理请求返回响应绑定地址监听连接接收连接创建子进程关闭连接套接字处理连接关闭连接套接字终止子进程关闭监听套接字服务器主进程服务器子进程TCP迭代服务器TCP并发服务器“进程”基本概念进程定义了一个计算的基本单元,可以认为是一个程序的一次运行。它是一

2、个动态实体,是独立的任务。它拥有独立的地址空间、执行堆栈、文件描述符等。每个进程拥有独立的地址空间,进程间正常情况下,互不影响,一个进程的崩溃不会造成其他进程的崩溃。当进程间共享某一资源时,需注意两个问题:同步问题和通信问题。创建进程#include#includepid_tfork(void)返回:父进程中返回子进程的进程ID,子进程返回0,-1-出错fork后,子进程和父进程继续执行fork()函数后的指令。子进程是父进程的副本。子进程拥有父进程的数据空间、

3、堆栈的副本。但父、子进程并不共享这些存储空间部分。如果代码段是只读的,则父子进程共享代码段。如果父子进程同时对同一文件描述字操作,而又没有任何形式的同步,则会出现混乱的状况;父进程中调用fork之前打开的所有描述字在函数fork返回之后子进程会得到一个副本。fork后,父子进程均需要将自己不使用的描述字关闭,有两方面的原因:(1)以免出现不同步的情况;(2)最后能正常关闭描述字#include#includemain(){inti,sum;sum=0;for(i=0;i

4、<=2;i++){sum=sum+i;printf(“i=%d",i);}printf("sum=%d",sum);}intmain(void){pid_tpid;intstatus;if((pid=fork())==0){sleep(2);printf("childrunning.");printf("childsleeping.");sleep(2);printf("childdead.");exit(0);}elseif(pid>0){printf("parentrunning.

5、n");printf("parentexit");exit(0);}else{printf("forkerror.");exit(1);}}创建进程(cont.)#include#includepid_tvfork(void);在BSD3.0中开始出现,主要为了解决fork昂贵的开销。它是完全共享的创建,新老进程共享同样的资源,完全没有拷贝。两者的基本区别在于当使用vfork()创建新进程时,父进程将被暂时阻塞,而子进程则可以借用父进程的地址空间。这个奇

6、特状态将持续直到子进程退出或调用execve()函数,至此父进程才继续执行。intmain(void){pid_tpid;intstatus;if((pid=vfork())==0){sleep(2);printf("childrunning.");printf("childsleeping.");sleep(2);printf("childdead.");exit(0);}elseif(pid>0){printf("parentrunning.");printf("parentexit

7、");exit(0);}else{printf("forkerror.");exit(1);}}运行的结果:终止进程进程的终止存在两个可能:父进程先于子进程终止(init进程领养)子进程先于主进程终止对于后者,系统内核为子进程保留一定的状态信息:进程ID、终止状态、CPU时间等;当父进程调用wait或waitpid函数时,获取这些信息;(什么叫“僵尸进程”?)当子进程正常或异常终止时,系统内核向其父进程发送SIGCHLD信号;缺省情况下,父进程忽略该信号,或者提供一个该信号发生时即被调用的函数。终止进程

8、(续)#includevoidexit(intstatus);本函数终止调用进程。关闭所有子进程打开的描述符,向父进程发送SIGCHLD信号,并返回状态。获取子进程终止信息#include#includepid_twait(int*stat_loc);返回:终止子进程的ID-成功;-1-出错;stat_loc存储子进程的终止状态(一个整数);如

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

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

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