网络软件设计5——并发与重复服务.pptVIP

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络软件设计5——并发与重复服务

段景山 基本流程下做不到并发服务,也就是像多个用户提供服务。 * 进程,线程,并发,并行,多任务调度???? * 子进程有什么作用?并发服务方式?? * 这又是怎么实现并发服务的?? 分离是什么意思? 线程?进程?线程与进程的区别和联系? 线程,并发?spy? 网络软件设计 并发服务与重复服务 Concurrent Service Repeating Service 制作 主讲 段景山 引入 基本流程下的服务器程序在多个客户同时连接服务器时,只能为一个客户提供服务。 * * 1、基本思想 1.1 重复服务 仅使用一个服务器进程依次为每个用户服务 s = socket( SOCK_STREAM); bind(s,…); listen(s,5); while(1){ ns = accept(s,…); recv(ns,…); send(ns,…); closesocket(ns); } closesocket(s); 监听 套接字 连接服务 套接字 连接服务 套接字 连接服务 套接字 循环—重复 * 基本思想 1.2并发服务 利用多个进程“同时”为各用户请求服务 主进程 子进程 1 子进程 2 监听 套接字 创建 连接服务 套接字 连接服务 套接字 相关知识 进程 线程 并发 并行 多任务系统调度 *单CPU系统 监听到连接 * 2、重复服务方式实现 2 、重复服务方式的实现 s = socket( SOCK_STREAM); bind(s,…); listen(s,5); while(1){ ns = accept(s,…); recv(ns,…); send(ns,…); closesocket(ns); } closesocket(s); * 并发服务实现 3 并发服务方式的实现 3.1 并发服务程序流程——流程驱动 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); 关键技术 完成通信 父进程为每一条连接 生成一个子进程 每个子进程在相应的 连接上完成通信 * 并发服务实现 3.2 UNIX并发服务的实现 3.2.1、fork() 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); } fork(): 创建一个新进程, 新进程是父进程的复制品--数据、代码 因此新进程将完成和父进程同样的功能. * 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); } 并发服务实现 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); } 主进程 子进程 子进程从这里开始 * 并发服务的实现 执行结果 main(){ int i; sum = 0; fork(); for(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

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档