文档详情

9并发服务器.ppt

发布:2016-12-18约4.39千字共32页下载文档
文本预览下载声明
单线程的ECHO服务器 TCPmechod.c page118 在熟知端口上打开一个被动套接字 使用系统函数getdtablesize来决定描述符最大个数 使用FD_ZERO和FD_SET创建一个比特向量,对应于希望测试的套接字描述符 select等待一个或者多个描述符就绪 FD_ISSET测试哪个描述符就绪 FD_CLR关闭连接后,从描述符组中删除 小结 并发服务器通常是数据驱动的,不是下层操作系统中的时间分片机制驱动的 服务处理很少的情况下,单线程应用异步I/O管理多个连接,和多线程实现一样高校 单线程实现中,一个执行线程完成了主线程和从线程的职责 一组描述符表 使用select函数 ECHO服务器的例子 * * * * * * * * * * * * * * * * * * * * * * * * * 《计算机通信与网络编程》 第九讲 并发服务器 电子科技大学计算机学院 并发服务器概述 并发的面向连接的服务器 采用算法8.4的最常用的服务器设计 主服务器进程在机器启动的时候自动一直运行,对每个客户的新连接创建一个新的从线程/进程进行处理 并发ECHO的例子 多线程设计的并发服务器 单线程的并发服务器 并发ECHO 功能:客户打开到某个服务器的连接,然后在该连接上重复发送数据,并读取从服务器返回的回显,服务器响应每个客户,接受连接,读取来自该客户的数据,并原样返回给客户。 服务器在发送响应前并非读取全部输入,只是交替读写 服务器在遇到文件结束的条件后,关闭连接 循环与并发实现的比较 如果使用循环服务器实现 某些客户可能发送大量的数据,导致其他的客户延迟 使用并发服务器实现 避免了长时间的延迟,不允许单个客户占用所有的资源 使服务器与许多客户同时进行通信 客户感觉服务器提供了较短的响应时间 进程结构 服务器包括一个主进程,以及零个或者多个从进程。每个进程一个线程 主服务器使用accept阻塞调用,节约CPU资源,连接到来的时候,accept马上返回。 用于单个连接的套接字 用于连接请求的套接字 主进程 从进程1 从进程2 从进程3 操作系统 服务器应用进程(或线程) 循环的面向连接服务器 进程结构 用于连接请求的套接字 服务器 操作系统 服务器应用进程 用于单个连接的套接字 并发ECHO服务器举例 #include 语句 变量定义,宏定义,函数声明 主函数 参数处理 建立被动套接字 循环等待连接,如果有新连接,则fork一个新的进程,调用TCPechod进行处理 TCPechod函数 处理echo服务 信号概念 信号UNIX系统所使用的最古老的进程通信方法 系统用信号通知一个或多个进程异步事件的发生 内核-进程 或者 进程-进程 不能直接携带信息,一般用作非正常情况处理 信号定义: SIGHUP/SIGINT/SIGQUIT/SIGCHLD/…… SIGCHLD:子进程结束信号 signal( )系统调用:将指定的处理函数和信号相关联 清除游离进程 使用fork的服务器动态生成进程,可能导致不完全的进程终止 linux在一个子进程退出的时候,会给父进程一个信号(signal) 正在退出的进程保持僵尸状态,直到父进程执行wait3系统调用为止 signal(SIGCHLD, reaper)主服务器进程收到子进程退出信号的时候,执行函数reaper 函数reaper调用函数wait3完成子进程的终止并退出。 参数WNOHANG指明wait3不要为了进程退出而阻塞等待 多进程并发服务器 特点:连接请求触发创建新的进程,关闭连接触发进程的退出; 优点: 并发服务多个客户; 结构清晰,编程容易; 缺点: 上下文切换开销大; 并发度不高; 小结 面向连接的并发技术 使用多进程的方式实现:fork 主进程的线程永远不会和任何客户打交道,只接受连接,创建一个从进程处理各个连接 从进程从主进程调用fork后立即执行 主进程关闭新连接所用的描述符的副本 从进程关闭主描述符的副本 使用线程来实现并发 一个进程中有一个或者多个线程 linux中的线程符合POSIX线程标准,1003.1c linux中线程的特点 动态创建:pthread_create,具有上限 并发执行:多处理机上可以并行 抢先:系统自动在多个线程中调动CPU资源 私有局部变量:每个线程有自己的私有堆栈 共享全局变量:一个进程的所有线程共享全局变量 共享文件描述符:一个进程内的所有线程共享一组文件描述符 协调和同步函数:具有线程协调和同步执行的函数 线程的优点 多线程的进程和单线程的进程比较 更高的效率:上下文交换的额外开销减少 上下文交换:线程切换需要执行的指令 同一进程中的两个线程比不同进程中的两个线程切换要快
显示全部
相似文档