计算机网络编程 第九讲 并发服务器.ppt

计算机网络编程 第九讲 并发服务器.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

?计算机网络编程?; 多进程实现并发(第11章)

多线程实现并发(第12章)

单线程实现并发(第13章);并发的面向连接的效劳器

采用算法8.4的最常用的效劳器设计

主效劳器进程在机器启动的时候自动一直运行,对每个客户的新连接创立一个新的从线程/进程进行处理

并发ECHO的例子

多进程〔每个进程含一个线程〕设计的并发效劳器

多线程〔属于同一个进程〕设计的并发效劳器

单线程设计的并发效劳器;功能:

客户翻开到某个效劳器的连接,然后在该连接上重复发送数据,并读取从效劳器返回的回显,

效劳器响应每个客户,接受连接,读取来自该客户的数据,并原样返回给客户。

效劳器在发送响应前并非读取全部输入,只是交替读写

效劳器在遇到文件结束的条件后,关闭连接;如果使用循环效劳器实现

某些客户可能发送大量的数据,导致其他的客户延迟

使用并发效劳器实现

防止了长时间的延迟,不允许单个客户占用所有的资源

使效劳器与许多客户同时进行通信

客户感觉效劳器提供了较短的响应时间;效劳器包括一个主进程,以及零个或者多个从进程。每个进程一个线程

主效劳器使用accept阻塞调用,节约CPU资源,连接到来的时候,accept马上返回。;#include语句

变量定义,宏定义,函数声明

主函数

参数处理

建立被动套接字

循环等待连接,如果有新连接,那么fork一个新的线程,调用TCPechod进行处理

TCPechod函数

处理echo效劳;使用fork的效劳器动态生成进程,可能导致不完全的进程终止

linux在一个子进程退出的时候,会给父进程一个信号〔signal)

正在退出的进程保持在死状态,直到父进程执行wait3系统调用为止

signal〔SIGCHLD,reaper)主效劳器进程收到子进程退出信号的时候,执行函数reaper

函数reaper调用函数wait3完成子进程的终止并退出。

参数WNOHANG指明wait3不要为了进程退出而阻塞等待;;一个进程中有一个或者多个线程

linux中的线程符合POSIX线程标准,1003.1c

linux中线程的特点

动态创立:pthread_create,具有上限

并发执行:多处理机上可以并行

抢先:系统自动在多个线程中调动CPU资源

私有局部变量:每个线程有自己的私有堆栈,存放局部变量

共享全局变量:一个进程的所有线程共享全局变量

共享文件描述符:一个进程内的所有线程共享一组文件描述符

协调和同步函数:具有线程协调和同步执行的函数;多线程的进程和单线程的进程比较

更高的效率:上下文切换的额外开销减少

上下文切换:线程切换需要执行的指令

同一进程中的两个线程比不同进程中的两个线程切换要快

进程内的线程切换不用改变虚拟存储器的映射

共享存储器:

并发效劳器中的多个副本需要相互通信或者访问共享的数据

利用线程容易构造监控系统;由于线程间共享存储器和进程状态,一个线程的动作可能对同一个进程内的其他线程产生影响。

两个线程如果同一时刻访问同一个变量,会产生相互干扰

将指针返回给一个静态的数据项的库函数不是线程平安(threadsafe)的,覆盖将会导致错误

缺乏健壮性,一个线程出错,效劳器将会终止整个进程;许多动态分配的资源都是和进程相关的

一个线程翻开某个文件,同一进程的其他线程也可以使用同一个描述符访问文件

虽然有些操作系统调用只会影响调用它的线程

I/O调用阻塞,只影响调用它的线程;

但是有些系统调用会影响整个进程

exit函数会让整个进程退出

线程的退出方法

线程的顶级过程返回时终止该线程

调用pthread_exit终止该线程;线程协调和同步是必要的

线程可能被阻塞。

线程的同步机制:互斥,信号量,条件变量

互斥

对共享数据的排他性访问

pthread_mutex_init,产生并初始化一个互斥

pthread_mutex_lock,使用共享数据前调用

pthread_mutex_unlock,使用共享数据后释放;信号量:同步机制

用于系统中有N个资源可用的情况允许N个线程同时执行使用

sem_init,初始化一个信号量

sem_wait,线程使用一个资源前必须调用

sem_post,使用完后返还资源;条件变量

最复杂和难以理解的一种同步机制

一组线程使用互斥对同一个资源提供排它性访问。

一旦某个线程获得资源,它需要等待一个特定的条件发生

pthread_cond_wait:同时指定了等待的条件变量和所拥有的互斥,执行后阻塞。

pthread_cond_signal只允许一个线程继续执行

pthread_cond_broadcast允许多个线程继续执行

等待条件变量的时候要暂时放弃互斥

得到条件变量的时候自动重新获得互斥

;多线程的ECHO效劳

并发的面向连接的算法

连接到达后,调用pthread_c

文档评论(0)

ranfand + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档