




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
并发服务器,服务器分类,按连接类型分类面向连接的服务器(如tcp)面向无连接的服务器(如udp)按处理方式分类迭代服务器并发服务器,迭代服务器vs.并发服务器,绑定地址,监听连接,接收连接,处理连接,断开连接,接收请求,处理请求,返回响应,绑定地址,监听连接,接收连接,创建子进程,关闭连接套接字,处理连接,关闭连接套接字,终止子进程,服务器主进程,服务器子进程,TCP迭代服务器,TCP并发服务器,“进程”基本概念,进程定义了一个计算的基本单元,可以认为是一个程序的一次运行。它是一个动态实体,是独立的任务。它拥有独立的地址空间、执行堆栈、文件描述符等。每个进程拥有独立的地址空间,进程间正常情况下,互不影响,一个进程的崩溃不会造成其他进程的崩溃。当进程间共享某一资源时,需注意两个问题:同步问题和通信问题。,创建进程,#include#includepid_tfork(void)返回:父进程中返回子进程的进程ID,子进程返回0,-1出错fork后,子进程和父进程继续执行fork()函数后的指令。子进程是父进程的副本。子进程拥有父进程的数据空间、堆栈的副本。但父、子进程并不共享这些存储空间部分。如果代码段是只读的,则父子进程共享代码段。如果父子进程同时对同一文件描述字操作,而又没有任何形式的同步,则会出现混乱的状况;父进程中调用fork之前打开的所有描述字在函数fork返回之后子进程会得到一个副本。fork后,父子进程均需要将自己不使用的描述字关闭。,创建进程(cont.),#include#includepid_tvfork(void);该系统调用基本上与fork相同,在BSD3.0中开始出现,主要为了解决fork昂贵的开销。两者的基本区别在于当使用vfork()创建新进程时,父进程将被暂时阻塞,而子进程则可以借用父进程的地址空间,直到子进程退出,至此父进程才继续执行。,终止进程,进程的终止存在两个可能:父进程先于子进程终止(init进程领养)子进程先于主进程终止对于后者,系统内核为子进程保留一定的状态信息:进程ID、终止状态、CPU时间等;当父进程调用wait或waitpid函数时,获取这些信息;(什么叫“僵尸进程”?)当子进程正常或异常终止时,系统内核向其父进程发送SIGCHLD信号;缺省情况下,父进程忽略该信号,或者提供一个该信号发生时即被调用的函数。,终止进程(续),#includevoidexit(intstatus);本函数终止调用进程。关闭所有子进程打开的描述符,向父进程发送SIGCHLD信号,并返回状态。,获取子进程终止信息,#include#includepid_twait(int*stat_loc);返回:终止子进程的ID成功;-1出错;stat_loc存储子进程的终止状态(一个整数);如果没有终止的子进程,但是有一个或多个正在执行的子进程,则该函数将堵塞,直到有一个子进程终止或者wait被信号中断时,wait返回。当调用该系统调用时,如果有一个子进程已经终止,则该系统调用立即返回,并释放子进程所有资源。,获取子进程终止信息,pid_twaitpid(pid_tpid,int*stat_loc,intoptions);返回:终止子进程的ID成功;-1出错;stat_loc存储子进程的终止状态;当pid=-1,option=0时,该函数等同于wait,否则由参数pid和option共同决定函数行为,其中pid参数意义如下:-1:要求知道任何一个子进程的返回状态(等待第一个终止的子进程);0:要求知道进程号为pid的子进程的状态;-1:要求知道进程号为pid的绝对值的子进程的终止状态Options最常用的选项是WNOHANG,它通知内核在没有已终止进程时不要堵塞。,获取子进程终止信息(cont.),调用wait或waitpid函数时,正常情况下,可能会有以下几种情况:阻塞(如果其所有子进程都还在运行);获得子进程的终止状态并立即返回(如果一个子进程已终止,正等待父进程存取其终止状态);出错立即返回(如果它没有任何子进程),多进程并发服务器状态图,服务器,客户,connect()函数,listenfd,客户/服务器状态图(调用accept函数时),连接请求,多进程并发服务器状态图(cont.),服务器,客户,connect()函数,listenfd,客户/服务器状态图(调用accept函数后),connfd,连接建立,多进程并发服务器状态图(cont.),服务器(父进程),客户,connect()函数,listenfd,客户/服务器状态图(调用fork函数后),connfd,连接建立,服务器(子进程),listenfd,connfd,fork()函数,多进程并发服务器状态图(cont.),服务器(父进程),客户,connect()函数,listenfd,客户/服务器状态图(父进程关闭连接套接字,子进程关闭监听套接字),连接建立,服务器(子进程),connfd,多进程并发服务器实例,该实例包括服务器程序和客户程序,具体功能如下:服务器等待接收客户的连接请求,一旦连接成功则显示客户地址,接着接收客户端的名称并显示;然后接收来自该客户的字符串,每当收到一个字符串时,显示该字符串,并将字符串按照恺撒密码的加密方式(K=3)进行加密,再将加密后的字符发回客户端;之后,继续等待接收该客户的信息,直到客户关闭连接。要求服务器具有同时处理多个客户请求的能力。客户首先与相应的服务器建立连接;接着接收用户输入的客户端名称,并将其发送给服务器;然后继续接收用户输入的字符串,再将字符串发送给服务器,同时接收服务器发回的加密后的字符串并显示。之后,继续等待用户输入字符串,直到用户输入quit,客户关闭连接并退出。,多进程服务器的问题,虽然多进程并发服务器模式很多年来都使用得很好,但使用fork生成子进程存在一些问题。首先,fork占用大量的资源,内存映像要从父进程拷贝到子进程,所有描述符要在子进程中复制等。虽然当前采用写时拷贝(copy-on-write)技术,将真正的拷贝
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年茶叶深加工项目投资与产品研发合作协议
- 2025年新型绿色建筑设计标准合作研发合同
- 2025年生态景区游客中心建筑材料采购合同模板
- 2025年智能家居控制系统研发与安全测试服务合同
- 2025年环保合规性煤炭资源开采技术服务合同
- 2025年型商业秘密保护与竞业限制综合服务协议
- 2025年年度广告合作预付款及权益保障合同
- 2025年网络安全应急响应与处理服务外包协议
- 2025年度离婚案件财产分配咨询与调解专项合同
- 2025年度跨境电商品牌代理与多元化销售策略合作协议
- 2025年一建《铁路工程管理与实务》考前必刷必练题库500题(含真题、重点题)
- 2025届湖北省荆门市钟祥市重点中学小升初数学入学考试卷含解析
- DB32∕T 2452-2013 刺参浮筏吊养技术规范
- 放射科护理服务规范礼仪课件
- 充电桩安装与使用管理制度
- 乡村天然气管道铺设合同
- 项目验收表模板
- 航天科技集团招聘笔试题库2024
- 非高危行业生产经营单位主要负责人及安全管理人员安全生产知识和管理能力试题及答案
- FAE现场应用工程师招聘笔试题与参考答案
- 2024年新北师大版八年级上册物理全册教学课件(新版教材)
评论
0/150
提交评论