ImageVerifierCode 换一换
格式:PPT , 页数:29 ,大小:351.50KB ,
资源ID:13454769      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/13454769.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(第三章-socket多路-2.ppt)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

第三章-socket多路-2.ppt

1、Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,*,段景山,网络软件设计,并发服务与重复服务,Concurrent Service,Repeating Service,制作,主讲,段景山,1,、基本思想,1.1,重复服务,仅使用一个服务器进程依次为每个用户服务,s=socket(,SOCK_STREAM,);,bind(s,);,listen(s,5);,while(1),ns=,accept(s,);,

2、recv(ns,);,send(ns,);,closesocket(ns,);,closesocket(s,);,监听,套接字,连接服务,套接字,连接服务,套接字,连接服务,套接字,循环,重复,2,基本思想,1.2,并发服务,利用多个进程“同时”为各用户请求服务,主进程,子进程,1,子进程,2,监听,套接字,创建,连接服务,套接字,连接服务,套接字,相关知识,进程,线程,并发,并行,多任务系统调度,*单,CPU,系统,监听到连接,3,基本思想,1.3,两种服务方式的比较,程序结构,重复服务:轮询,并发服务:主、子进程,同时并发,系统效率,查询的效率,进程调度,上下文切换的开销,实现的难易度,特

3、别在多个用户接入的情况,例,用户接入系统输入用户名,口令,重复服务必须,统一管理每个,套接字的通信状态,并发服务下,一个线程(进程)一般只对应一个套接字,不需要统一管理,但涉及线程的控制,4,2,、实现,2,重复服务方式的实现,2.1,非多路复用,s=socket(,SOCK_STREAM,);,bind(s,);,listen(s,5);,while(1),ns=,accept(s,);,recv(ns,);,send(ns,);,closesocket(ns,);,closesocket(s,);,5,重复服务实现,2,重复服务方式的实现,2.2,多路复用,select,(),while(

4、1),while(recv(s,buf1,)0),while(select,(0,&readfds,0,0,&tmo),if(,FD_ISSET(s,&,readfds,),FD_SET(ss,&,readfds,);,生成查询队列,if(FD_ISSET(s,&,writefds,),get s from sockets queue,6,重复服务实现,2.3,重复服务多路复用流程,recv,处理数据,准备接收,新数据,关闭连接,END,收到,出错,没有,select,(,,,timeout,),准备发送,其它,sock_id,事件,7,并发服务实现,3,并发服务方式的实现,3.1,并发服务程

5、序流程,s=socket(,SOCK_STREAM,);,bind(s,);,listen(s,5);,while(1),ns,=,accept(s,);,closesocket(s,);,主进程,创建子进程,,并将,ns,传递给子进程,子进程(,ns,),while,(,recv,(,ns,,,)0),printf(buf,);,send(,ns,”ACK,”,);,closesocket(,ns,);,关键技术,完成通信,父进程为每一条连接,生成一个子进程,每个子进程在相应的,连接上完成通信,8,并发服务实现,3.2 UNIX,并发服务的实现,3.2.1fork,(),main,(),in

6、t,i;,sum=0;,fork,();,for,(,i,1;i=10000;i+,),printf,(,”,the value of i is%d“,i,);,fflush,(,stdout,);,sum,i,;,printf,(“the total is%,d”,sum,);,exit(0);,fork():,创建一个新进程,,新进程是父进程的复制品数据、代码,因此新进程将完成和父进程同样的功能,.,9,main,(),int,i;,sum=0;,fork,();,for,(,i,1;i=10000;i+,),printf,(,”,the value of i is%d“,i,);,ffl

7、ush,(,stdout,);,sum,i,;,printf,(“the total is%,d”,sum,);,exit(0);,并发服务实现,main,(),int,i;,sum=0;,fork,();,for,(,i,1;i=10000;i+,),printf,(,”,the value of i is%d“,i,);,fflush,(,stdout,);,sum,i,;,printf,(“the total is%,d”,sum,);,exit(0);,主进程,子进程,子进程从这里开始,10,并发服务的实现,执行结果,main,(),int,i;,sum=0;,fork,();,for

8、i,1;i=10000;i+,),printf,(,”,the value of i is%d,n“,i,);,fflush,(,stdout,);,sum,i,;,printf,(“the total is%,d”,sum,);,exit(0);,the value of i is 1,the value of I is 2,the value of i is 3,the value of i is 4,the value of i is 1,the value of I is 2,the value of i is 3,the value of i is 4,the value of

9、 i is 5,the value of I is 6,the value of i is 7,the value of i is 5,the value of i is 6,the value of I is 7,the value of i is 8,the value of i is 8,主,/,子进程并发执行(分时调度),进程,x,进程,y,进程,x,进程,y,思考:,sum,的结果,11,并发服务的实现,3.2.2 fork(),与并发服务,main,(),int,i;,sum=0;,fork,();,for,(,i,1;i=10000;i+,),printf,(,”,the val

10、ue of i is%d,n“,i,);,fflush,(,stdout,);,sum,i,;,printf,(“the total is%,d”,sum,);,exit(0);,Back,初始化,主要工作,Server,s=socket(,SOCK_STREAM,);,bind(s,);,listen(s,5);,while(1),ns=,accept(s,);,recv(ns,);,send(ns,);,closesocket(ns,);,closesocket(s,);,建立连接,通信,fork,();,12,并发服务的实现,Server,s=socket(,SOCK_STREAM,);

11、bind(s,);,listen(s,5);,while(1),ns=,accept(s,);,recv(ns,);,send(ns,);,closesocket(ns,);,closesocket(s,);,fork();,Server,s=socket(,SOCK_STREAM,);,bind(s,);,listen(s,5);,while(1),ns=,accept(s,);,recv(ns,);,send(ns,);,closesocket(ns,);,closesocket(s,);,fork();,问题:如何使主,/,子进程完成不同的工作?,主进程:不断建立连接,创建子进程,子进

12、程:完成连接上的通信,13,并发服务的实现,3.2.3,进程的分离,新进程执行与父进程不同的代码,利用,fork,()的返回值。,fork,()后,父进程得到的返回值为子进程标识符,fork,()后,子进程得到的返回值为,0,为新进程更换代码,fork,();,execve,();,14,并发服务的实现,利用,fork,返回值分离进程,s=socket(,SOCK_STREAM,);,bind(s,);,listen(s,5);,while(1),ns=,accept(s,);,recv(ns,);,send(ns,);,closesocket(ns,);,closesocket(s,);,f

13、ork();,pid,=fork();,if(pid,=0),closesocket(s,),recv(ns,);,send(ns,);,exit(0);,else,closesocket,(ns);,思考:主进程与子进程是如何分离的?,为什么在子进程中要关闭,s,为什么在主进程中要关闭,ns,子进程如何结束,父进程如何结束,子进程,父进程,15,s=socket(,SOCK_STREAM,);,bind(s,);,listen(s,5);,while(1),ns=,accept(s,);,pid,=fork();,if(,pid,=0),closesocket(s,),recv(ns,);,

14、send(ns,);,exit(0);,else,closesocket,(ns);,SOCKET,s,ns,;,int,pid,;,并发服务的实现,s=socket(,SOCK_STREAM,);,bind(s,);,listen(s,5);,while(1),ns=,accept(s,);,pid,=fork();,if(,pid,=0),closesocket(s,),recv(ns,);,send(ns,);,exit(0);,else,closesocket,(ns);,主进程,子进程,SOCKET,s,ns,;,int,pid,;,系统往,pid,中放入子进程,id,系统往,pid

15、中放入,0,16,并发服务的实现,用,execve,()替换子进程代码,可以使子进程具有与父进程不同的代码,int,execve,(const char*,pathname,const,char*,argv,const char*,envp,),pathname:,子进程执行的程序路径名,argv,:,传递给子进程的参数表,envp,:,指定子进程的新环境,17,并发服务的实现,s=socket(,SOCK_STREAM,);,bind(s,);,listen(s,5);,while(1),ns=,accept(s,);,pid,=fork();,if(pid,=0),closesocket

16、s);,argv1=ns;,execve(“user/bin/chat”,argv,NULL,);,else,closesocket,(ns);,Chat.c,main(argc,argv,),SOCKET s;,s=argv1;,recv(s,);,send(s,);,closesocket(s,);,18,并发服务的实现,3.3 Windows,并发服务的实现,CreateThread,生成线程,CreatePorcess,生成进程,线程执行指定的代码段,线程之间并发执行,与,UNIX,下的,fork,(),execve,方法类似,相关知识:线程与进程的区别和联系,19,并发服务的实现

17、3.3.1,CreateThread,HANDLE,CreateThread,(,LPSECURITY_ATTRIBUTES,lpThreadAttributes,DWORD,dwStackSize,LPTHREAD_START_ROUTINE,lpStartAddress,LPVOID,lpParameter,DWORD,dwCreationFlags,LPDWORD,lpThreadId,);,lpStartAddress,:,线程代码入口点线程函数指针,lpParameter,:传递给线程的参数,lpThreadId,:线程标识符返回值,函数返回值:线程句柄,20,并发服务的实现,DW

18、ORD WINAPI,ThreadFunc,(LPVOID,lpParam,),char szMsg80;,wsprintf,(,szMsg,ThreadFunc,:Parameter=%,dn,*,lpParam,);,MessageBox,(NULL,szMsg,Thread created.,MB_OK);,return 0;,VOID main(VOID),DWORD,dwThreadId,dwThrdParam,=1;,HANDLE,hThread,;,hThread,=,CreateThread,(NULL,0,ThreadFunc,&,dwThrdParam,0,&,dwThre

19、adId,);,/returns the thread identifier,/Check the return value for success.,if(,hThread,=NULL),ErrorExit,(,CreateThread,failed.);,CloseHandle,(,hThread,);,生成线程的例程,21,并发服务的实现,3.3.2,主进程代码,s=socket(,SOCK_STREAM,);,bind(s,);,listen(s,5);,while(1),ns=,accept(s,);,pid,=fork();,if(pid,=0),closesocket,(s);,

20、argv1=ns;,execve(“user/bin/chat”,NULL,NULL,);,else,closesocket,(ns);,CreateThread,(NULL,0,chat,/,子线程函数入口,&,param,/,传给子线程的参数,0,&,Tid,);,param,=ns;,22,并发服务的实现,3.3.3,线程代码,DWORD WINAPI,chat(LPVOID,param,),SOCKET s;,s=(SOCKET)*,param,;,recv,(s,);,send(s,),while(1),closesocket,(s);,23,小结,并发服务机制具有多路复用功能,并发

21、执行的进程,/,线程同时为多条连接服务,并发服务与上下文切换,在并发执行的进程间调度,需要消耗系统资源,多路复用的实现方法,事件驱动的重复服务,select,生成子进程的并发服务,24,并发服务实验,实验目的,编写并发服务机制的服务器程序,感受多线程并发服务的效果,实验原理与方法,并发服务具有多路复用特点,通过执行程序感受,通过,spy,查找线程存在的证据,实验过程,1,、完成程序,将连接建立后的通信程序段作为一个函数调用,以方便对比实验,2,、不建立线程,服务器程序是否能提供多路复用,3,、建立线程,服务器程序能否提供多路复用,4,、利用,Spy,查看线程,是否能找到多个服务器线程,当有,n

22、个客户与服务器建立了连接,服务器线程数为,将线程号记录下来以便查询,25,性能瓶颈,每个线程或者进程只能监听一个连接,如果要处理成千上万个连接?,一个线程能够处理,64,个连接,多开一些线程或者进程就能够提高并行处理能力,26,3.4,节的基本想法,使用,WSAEventSelect,函数,在一个线程中最多可以同时侦听,64,个,socket,同时开多个线程来增加处理能力。,在主线程中,监听,socket,,每新到一个连接请求,,分配到一个有能力的线程中,如实在找不到则新建一个线程。,在线程中实现多个,socket,的通信任务,27,数据结构,建立一个线程列表,每一个,threadobj,记录一个线程的工作信息,如图,3.2,所示,Event,数组:每个线程侦听的,socket,都要与一个,event,关联。,Psocket,链表:线程侦听的,socket,表。,Nsocketcount,:线程侦听的连接数目,28,见教材程序,29,

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服