网站大量收购独家精品文档,联系QQ:2885784924

Linux/UNIX网络编程 甘刚 第05章 并发服务器新.ppt

Linux/UNIX网络编程 甘刚 第05章 并发服务器新.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
并发服务器 目录 服务器分类技术 进程与线程 多进程服务器 多线程服务器 服务器分类 按连接类型分类 面向连接的服务器(如tcp) 面向无连接的服务器(如udp) 按处理方式分类 迭代服务器 并发服务器 迭代服务器 vs. 并发服务器 “进程”基本概念 进程定义了一个计算的基本单元,可以认为是一个程序的一次运行。它是一个动态实体,是独立的任务。它拥有独立的地址空间、执行堆栈、文件描述符等。 每个进程拥有独立的地址空间,进程间正常情况下,互不影响,一个进程的崩溃不会造成其他进程的崩溃。 当进程间共享某一资源时,需注意两个问题:同步问题和通信问题。 创建进程 #include sys/types.h #include unistd.h pid_t fork(void) 返回:父进程中返回子进程的进程ID, 子进程返回0, -1-出错 fork后,子进程和父进程继续执行fork()函数后的指令。子进程是父进程的副本。子进程拥有父进程的数据空间、堆栈的副本。但父、子进程并不共享这些存储空间部分。如果代码段是只读的,则父子进程共享代码段。如果父子进程同时对同一文件描述字操作,而又没有任何形式的同步,则会出现混乱的状况; 父进程中调用fork之前打开的所有描述字在函数fork返回之后子进程会得到一个副本。fork后,父子进程均需要将自己不使用的描述字关闭。 创建进程(cont.) #include sys/types.h #include unistd.h pid_t vfork(void); 该系统调用基本上与fork相同,在BSD3.0中开始出现,主要为了解决fork昂贵的开销。 两者的基本区别在于当使用vfork()创建新进程时,父进程将被暂时阻塞,而子进程则可以借用父进程的地址空间,直到子进程退出,至此父进程才继续执行。 终止进程 进程的终止存在两个可能: 父进程先于子进程终止(init进程领养) 子进程先于主进程终止 对于后者,系统内核为子进程保留一定的状态信息:进程ID、终止状态、CPU时间等;当父进程调用wait或waitpid函数时,获取这些信息;(什么叫“僵尸进程”?) 当子进程正常或异常终止时,系统内核向其父进程发送SIGCHLD信号;缺省情况下,父进程忽略该信号,或者提供一个该信号发生时即被调用的函数。 终止进程(续) #include stdlib.h void exit(int status); 本函数终止调用进程。关闭所有子进程打开的描述符,向父进程发送SIGCHLD信号,并返回状态。 获取子进程终止信息 #include sys/types.h #include sys/wait.h pid_t wait(int *stat_loc); 返回:终止子进程的ID-成功;-1-出错;stat_loc存储子进程的终止状态(一个整数); 如果没有终止的子进程,但是有一个或多个正在执行的子进程,则该函数将堵塞,直到有一个子进程终止或者wait被信号中断时,wait返回。 当调用该系统调用时,如果有一个子进程已经终止,则该系统调用立即返回,并释放子进程所有资源。 获取子进程终止信息 使用wait()函数可能会出现一个问题 获取子进程终止信息 pid_t waitpid(pid_t pid, int *stat_loc, int options); 返回:终止子进程的ID-成功;-1-出错;stat_loc存储子进程的终止状态; 当pid=-1,option=0时,该函数等同于wait,否则由参数pid和option共同决定函数行为,其中pid参数意义如下: -1:要求知道任何一个子进程的返回状态(等待第一个终止的子进程); 0:要求知道进程号为pid的子进程的状态; -1:要求知道进程号为pid的绝对值的子进程的终止状态 Options最常用的选项是WNOHANG,它通知内核在没有已终止进程时不要堵塞。 获取子进程终止信息(cont.) 调用wait或waitpid函数时,正常情况下,可能会有以下几种情况: 阻塞(如果其所有子进程都还在运行); 获得子进程的终止状态并立即返回(如果一个子进程已终止,正等待父进程存取其终止状态); 出错立即返回(如果它没有任何子进程) 多进程并发服务器状态图 多进程并发服务器状态图(cont.) 多进程并发服务器状态图(cont.) 多进程并发服务器状态图(cont.) 多进程并发服务器实例 该实例包括服务器程序和客户程序,具体功能如下: 服务器等待接收客户的连接请求,一旦连接成功则显示客户地址,接着接收客户端的名称并显示;然后接收来自该客户的字符串,每当收到一个字符串时,显示该字符串,并将字符串按照恺撒密码的加密方式(K=3

文档评论(0)

精品课件 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档