版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第九讲第九讲 并发服务器并发服务器电子科技大学计算机学院电子科技大学计算机学院1多进程实现并发(第11章)多线程实现并发(第12章)单线程实现并发(第13章)计算机网络编程电子科大计算机学院2并发的面向连接的服务器并发的面向连接的服务器 采用算法采用算法8.48.4的最常用的服务器设计的最常用的服务器设计 主服务器进程在机器启动的时候自动一直运行,对每个主服务器进程在机器启动的时候自动一直运行,对每个客户的新连接创建一个新的从线程客户的新连接创建一个新的从线程/ /进程进行处理进程进行处理 并发并发ECHOECHO的例子的例子 多进程(每个进程含一个线程)设计的并发服务器多进程(每个进程含一个
2、线程)设计的并发服务器 多线程(属于同一个进程)设计的并发服务器多线程(属于同一个进程)设计的并发服务器 单线程设计的并发服务器单线程设计的并发服务器计算机网络编程电子科大计算机学院3功能:功能: 客户打开到某个服务器的连接,然后在该连接上重复发送客户打开到某个服务器的连接,然后在该连接上重复发送数据,并读取从服务器返回的回显,数据,并读取从服务器返回的回显, 服务器响应每个客户,接受连接,读取来自该客户的数据,服务器响应每个客户,接受连接,读取来自该客户的数据,并原样返回给客户。并原样返回给客户。服务器在发送响应前并非读取全部输入,只是交替服务器在发送响应前并非读取全部输入,只是交替读写读写
3、服务器在遇到文件结束的条件后,关闭连接服务器在遇到文件结束的条件后,关闭连接计算机网络编程电子科大计算机学院4如果使用循环服务器实现如果使用循环服务器实现 某些客户可能发送大量的数据,导致其他的客户延迟某些客户可能发送大量的数据,导致其他的客户延迟使用并发服务器实现使用并发服务器实现 避免了长时间的延迟,不允许单个客户占用所有的资源避免了长时间的延迟,不允许单个客户占用所有的资源 使服务器与许多客户同时进行通信使服务器与许多客户同时进行通信 客户感觉服务器提供了较短的响应时间客户感觉服务器提供了较短的响应时间计算机网络编程电子科大计算机学院5服务器包括一个主进程,以及零个或者多个从进程。服务器
4、包括一个主进程,以及零个或者多个从进程。每个进程一个线程每个进程一个线程主服务器使用主服务器使用acceptaccept阻塞调用,节约阻塞调用,节约CPUCPU资源,连接资源,连接到来的时候,到来的时候,acceptaccept马上返回。马上返回。计算机网络编程电子科大计算机学院6用于单个连用于单个连接的套接字接的套接字用于连接请用于连接请求的套接字求的套接字主进程主进程从进程从进程1从进程从进程2从进程从进程3操作系统操作系统服务器应用进程服务器应用进程(或线程)(或线程)#include #include 语句语句变量定义,宏定义,函数声明变量定义,宏定义,函数声明主函数主函数 参数处理参
5、数处理 建立被动套接字建立被动套接字 循环等待连接,如果有新连接,则循环等待连接,如果有新连接,则forkfork一个新的线程,调一个新的线程,调用用TCPechodTCPechod进行处理进行处理TCPechodTCPechod函数函数 处理处理echoecho服务服务计算机网络编程电子科大计算机学院7使用使用forkfork的服务器动态生成进程,可能导致不完的服务器动态生成进程,可能导致不完全的进程终止全的进程终止 linuxlinux在一个子进程退出的时候,会给父进程一个信号在一个子进程退出的时候,会给父进程一个信号(signal)signal) 正在退出的进程保持在死状态,直到父进程执
6、行正在退出的进程保持在死状态,直到父进程执行wait3wait3系统调用为止系统调用为止 signalsignal(SIGCHLD, reaper)SIGCHLD, reaper)主服务器进程收到子进程退主服务器进程收到子进程退出信号的时候,执行函数出信号的时候,执行函数reaperreaper 函数函数reaperreaper调用函数调用函数wait3wait3完成子进程的终止并退出。完成子进程的终止并退出。 参数参数WNOHANGWNOHANG指明指明wait3wait3不要为了进程退出而阻塞等待不要为了进程退出而阻塞等待计算机网络编程电子科大计算机学院8面向连接的并发技术面向连接的并发技
7、术使用多进程的方式实现:使用多进程的方式实现:forkfork 主进程的线程永远不会和任何客户打交道,只接受连接,主进程的线程永远不会和任何客户打交道,只接受连接,创建一个从进程处理各个连接创建一个从进程处理各个连接从进程从主进程调用从进程从主进程调用forkfork后立即执行后立即执行 主进程关闭新连接所用的描述符的副本主进程关闭新连接所用的描述符的副本 从进程关闭主描述符的副本从进程关闭主描述符的副本计算机网络编程电子科大计算机学院9一个进程中有一个或者多个线程一个进程中有一个或者多个线程 linuxlinux中的线程符合中的线程符合POSIXPOSIX线程标准,线程标准,1003.1c1
8、003.1clinuxlinux中线程的特点中线程的特点 动态创建:动态创建:pthread_createpthread_create,具有上限,具有上限 并发执行:多处理机上可以并行并发执行:多处理机上可以并行 抢先:系统自动在多个线程中调动抢先:系统自动在多个线程中调动CPUCPU资源资源 私有局部变量:每个线程有自己的私有堆栈私有局部变量:每个线程有自己的私有堆栈, ,存放局部变量存放局部变量 共享全局变量:一个进程的所有线程共享全局变量共享全局变量:一个进程的所有线程共享全局变量 共享文件描述符:一个进程内的所有线程共享一组文件描述符共享文件描述符:一个进程内的所有线程共享一组文件描述
9、符 协调和同步函数:具有线程协调和同步执行的函数协调和同步函数:具有线程协调和同步执行的函数计算机网络编程电子科大计算机学院10多线程的进程和单线程的进程比较多线程的进程和单线程的进程比较 更高的效率:上下文切换的额外开销减少更高的效率:上下文切换的额外开销减少 上下文切换:线程切换需要执行的指令上下文切换:线程切换需要执行的指令 同一进程中的两个线程比不同进程中的两个线程切换要快同一进程中的两个线程比不同进程中的两个线程切换要快 进程内的线程切换不用改变虚拟存储器的映射进程内的线程切换不用改变虚拟存储器的映射 共享存储器:共享存储器: 并发服务器中的多个副本需要相互通信或者访问共享的数据并发
10、服务器中的多个副本需要相互通信或者访问共享的数据 利用线程容易构造监控系统利用线程容易构造监控系统计算机网络编程电子科大计算机学院11由于线程间共享存储器和进程状态,一个线程的动由于线程间共享存储器和进程状态,一个线程的动作可能对同一个进程内的其他线程产生影响。作可能对同一个进程内的其他线程产生影响。 两个线程如果同一时刻访问同一个变量,会产生相互干扰两个线程如果同一时刻访问同一个变量,会产生相互干扰 将指针返回给一个静态的数据项的库函数不是线程安全将指针返回给一个静态的数据项的库函数不是线程安全(thread safe)(thread safe)的,覆盖将会导致错误的,覆盖将会导致错误 缺乏
11、健壮性,一个线程出错,服务器将会终止整个进程缺乏健壮性,一个线程出错,服务器将会终止整个进程计算机网络编程电子科大计算机学院12许多动态分配的资源都是和进程相关的许多动态分配的资源都是和进程相关的一个线程打开某个文件,同一进程的其他线程也可以使用同一一个线程打开某个文件,同一进程的其他线程也可以使用同一个描述符访问文件个描述符访问文件虽然虽然有些操作系统调用只会影响调用它的线程有些操作系统调用只会影响调用它的线程 I/OI/O调用阻塞,只影响调用它的线程;调用阻塞,只影响调用它的线程; 但是但是有些系统调用会影响整个进程有些系统调用会影响整个进程 exitexit函数会让整个进程退出函数会让整
12、个进程退出线程的退出方法线程的退出方法 线程的顶级过程返回时终止该线程线程的顶级过程返回时终止该线程 调用调用pthread_exitpthread_exit终止该线程终止该线程计算机网络编程电子科大计算机学院13线程协调和同步是必要的线程协调和同步是必要的 线程可能被阻塞。线程可能被阻塞。 线程的同步机制:互斥,信号量,条件变量线程的同步机制:互斥,信号量,条件变量互斥互斥 对共享数据的排他性访问对共享数据的排他性访问 pthread_mutex_init,pthread_mutex_init,产生并初始化一个互斥产生并初始化一个互斥 pthread_mutex_lock, pthread_
13、mutex_lock, 使用共享数据前调用使用共享数据前调用 pthread_mutex_unlockpthread_mutex_unlock,使用共享数据后释放,使用共享数据后释放计算机网络编程电子科大计算机学院14信号量:同步机制信号量:同步机制 用于系统中有用于系统中有N N个资源可用的情况允许个资源可用的情况允许N N个线程同时执行个线程同时执行使用使用 sem_initsem_init,初始化一个信号量,初始化一个信号量 sem_wait, sem_wait, 线程使用一个资源前必须调用线程使用一个资源前必须调用 sem_postsem_post,使用完后返还资源,使用完后返还资源计
14、算机网络编程电子科大计算机学院15条件变量条件变量 最复杂和难以理解的一种同步机制最复杂和难以理解的一种同步机制 一组线程使用互斥对同一个资源提供排它性访问。一组线程使用互斥对同一个资源提供排它性访问。 一旦某个线程获得资源,它需要等待一个特定的条件发生一旦某个线程获得资源,它需要等待一个特定的条件发生pthread_cond_wait: pthread_cond_wait: 同时指定了等待的条件变同时指定了等待的条件变量和所拥有的互斥,执行后阻塞。量和所拥有的互斥,执行后阻塞。 pthread_cond_signalpthread_cond_signal只允许一个线程继续执行只允许一个线程继
15、续执行 pthread_cond_broadcastpthread_cond_broadcast允许多个线程继续执行允许多个线程继续执行 等待条件变量的时候要暂时放弃互斥等待条件变量的时候要暂时放弃互斥 得到条件变量的时候自动重新获得互斥得到条件变量的时候自动重新获得互斥计算机网络编程电子科大计算机学院16多线程的多线程的ECHOECHO服务服务 并发的面向连接的算法并发的面向连接的算法 连接到达后,调用连接到达后,调用pthread_createpthread_create创建一个新的线程来处创建一个新的线程来处理连接。理连接。 新线程执行新线程执行TCPechodTCPechod过程。过程
16、。TCPmtechod.c page110TCPmtechod.c page110 线程处理函数线程处理函数 统计结构的互斥使用统计结构的互斥使用 互斥处理函数互斥处理函数计算机网络编程电子科大计算机学院17采用一个独立的线程采用一个独立的线程prstatsprstats打印统计信息打印统计信息 每睡眠每睡眠INTERVALINTERVAL打印一次打印一次 监控线程和从线程使用一个共享的全局数据结构:监控线程和从线程使用一个共享的全局数据结构:statsstats相互通信相互通信 采用互斥的机制:采用互斥的机制:stats.st_mutexstats.st_mutex实际的服务器监控程序可以让
17、管理员以更加复杂的实际的服务器监控程序可以让管理员以更加复杂的形式和服务器交互形式和服务器交互 可以控制服务器可以控制服务器 可以按需提供信息可以按需提供信息 可以得到更加全面的信息可以得到更加全面的信息计算机网络编程电子科大计算机学院18并发服务器可以在一个进程中用若干线程实现并发服务器可以在一个进程中用若干线程实现优点是:优点是: 开销少开销少 共享存储器共享存储器 可以监控可以监控缺点是:缺点是: 增加了编程的复杂性增加了编程的复杂性 必须使用同步机制协调线程对全局变量和一些库程序的必须使用同步机制协调线程对全局变量和一些库程序的访问访问 必须弄清一些可能影响整个进程的系统函数必须弄清一
18、些可能影响整个进程的系统函数计算机网络编程电子科大计算机学院19大多数并发服务器使用前面提供的两种方法,使用大多数并发服务器使用前面提供的两种方法,使用操作系统的设施创建独立的进程或者线程,利用分操作系统的设施创建独立的进程或者线程,利用分时来占用处理器时来占用处理器使用单线程也可以提供表面上的并发性使用单线程也可以提供表面上的并发性 为什么是可行的为什么是可行的 什么时候比较好什么时候比较好 如何实现如何实现计算机网络编程电子科大计算机学院20对一个请求的响应中如果对一个请求的响应中如果I/OI/O占了主导地位,服占了主导地位,服务器可以使用异步务器可以使用异步I/OI/O来实现表面并发性,
19、使用来实现表面并发性,使用数据触发处理。数据触发处理。ECHOECHO服务器服务器 理论上是时间分片机制让多线程共享理论上是时间分片机制让多线程共享CPUCPU 实际上是数据的到达控制了处理的进行实际上是数据的到达控制了处理的进行 每个从线程大部分时间花在每个从线程大部分时间花在readread的阻塞上的阻塞上若并发服务器处理每个请求仅需要很少时间,若并发服务器处理每个请求仅需要很少时间,可以由数据到达驱动。可以由数据到达驱动。在工作量太大,以致在工作量太大,以致CPUCPU不能顺序执行的时候,不能顺序执行的时候,分时机制才取而代之分时机制才取而代之计算机网络编程电子科大计算机学院21理解单线
20、程如何完成并发服务器任务理解单线程如何完成并发服务器任务 打开许多客户的打开许多客户的TCPTCP连接连接 线程阻塞等待数据的到达线程阻塞等待数据的到达 任何一个连接上有数据到达,线程就被唤醒任何一个连接上有数据到达,线程就被唤醒 处理请求,发送响应后,再次阻塞,等待处理请求,发送响应后,再次阻塞,等待 另一个连接上另一个连接上数据到达数据到达同多线程或者多进程比较,可能处理略高些的负荷同多线程或者多进程比较,可能处理略高些的负荷(因为减少了上下文切换开销因为减少了上下文切换开销)关键是使用关键是使用OSOS的的selectselect原语实现异步原语实现异步I/OI/O 算法算法8.58.5
21、列出了实现列出了实现计算机网络编程电子科大计算机学院22单线程、并发服务器的线程和套接字结构单线程、并发服务器的线程和套接字结构 一个执行线程管理所有的套接字一个执行线程管理所有的套接字计算机网络编程电子科大计算机学院23用于单个连用于单个连接的套接字接的套接字用于连接请用于连接请求的套接字求的套接字服务器服务器操作系统操作系统服务器应用进程服务器应用进程单线程服务器必须完成主线程和从线程双方的职责单线程服务器必须完成主线程和从线程双方的职责 维护一组套接字维护一组套接字 组中某套接字绑定到接受连接的熟知端口上组中某套接字绑定到接受连接的熟知端口上 其它套接字对应一个连接其它套接字对应一个连接 服务器把这组套接字描述符作为一个参数传递给服务器把这组套接字描述符作为一个参数传递给selectselect,并等待任何一个套接字的活动并等待任何一个套接字的活动 使用描述符来区别主线程和从线程的操作使用描述符来区别主线程和从线程的操作 主套接字描述符准备就绪,使用主线程的操作主套接字描述符准备就绪,使用主线程的操作 从套接字的描述符就绪,使用从线程的操作从套接字的描述符就绪,使用从线程的操作计算机网络编程电子科大计算机学院24TCPmechod.c page118TCPmechod.c page1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年线上推广服务合同
- 2026年建筑工程成效评估合同
- 房屋提前购买合同(标准版)
- 2025年修复性司法服务体系建设项目可行性研究报告
- 2025年智能仓储系统方案优化项目可行性研究报告
- 2025年医药供应链数字化解决方案可行性研究报告
- 浙江拟就业协议书
- 中国驻美协议书
- 老板要写解协议书
- 2025年智慧农业合作社发展项目可行性研究报告
- 生物安全培训课件检验科
- 十二生肖课件图文
- 2024年河北医科大学第四医院招聘笔试真题
- 四川省教育考试院2025年公开招聘编外聘用人员考试笔试模拟试题及答案解析
- 高层建筑屋面光伏板安装高处作业安全方案
- 餐厅前厅经理合同范本
- 出口大姜合同
- (2025年)(完整版)医疗器械基础知识培训考试试题及答案
- 特种设备安全管理培训培训
- 口腔科手术安全核查制度
- 2025年国家开放大学(电大)《劳动法》期末考试备考题库及答案解析
评论
0/150
提交评论