电子科技大学网络编程课件第二讲——客户-服务器软件中的并发处理_第1页
电子科技大学网络编程课件第二讲——客户-服务器软件中的并发处理_第2页
电子科技大学网络编程课件第二讲——客户-服务器软件中的并发处理_第3页
电子科技大学网络编程课件第二讲——客户-服务器软件中的并发处理_第4页
电子科技大学网络编程课件第二讲——客户-服务器软件中的并发处理_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机网络编程,第二讲 客户/服务器软件中的并发处理 电子科技大学计算机学院,目录,并发的概念 网络中的并发 服务器软件中的并发 客户软件中的并发 操作系统的并发功能 一个并发例子程序,计算机通信与网络编程,电子科大计算机学院,并发有真正的并发(并行: Parallelism )和表面上的并发(并发:Concurrency)(一般采用分时机制),计算机网络编程,电子科大计算机学院,并发的概念,并发模型,并行模型,单个网络各个机器之间许多成对进程好像独立使用网络资源(通道,机器等) 一个计算机系统中存在并发(分时) 一组机器上所有的客户之间存在并发,电子科大计算机学院,网络中的并发,互联网,C1

2、,C2,C4 C5,C3,计算机网络编程,单个服务器必须并发处理多个传入请求 并发服务器可以让多个远程用户同时使用同一个服务,实现起来比较复杂 本章其余部分主要介绍术语和概念;涉及其它问题:算法,设计,运行规则等在后续各章介绍,电子科大计算机学院,服务器中的并发,计算机网络编程,单台机器中的各个客户,一组机器上的所有客户之间也可以存在并发。(图3.1) 要使客户软件并发执行,一般并不需要程序员为此特别花功夫。(因为现代操作系统一般允许用户并发地执行客户程序),电子科大计算机学院,客户软件的并发,计算机网络编程,多进程操作系统 进程的概念:进程定义了一个计算的基本单元,它是一个执行某一个特定程序

3、的实体,它拥有独立的地址空间、执行堆栈、文件描述符等。 线程:一个进程可包含多个线程,线程特点: 轻型实体(基本不拥有系统资源) 独立调度和运行的基本单位 可并发执行 共享进程资源,电子科大计算机学院,操作系统的并发功能,计算机网络编程,操作系统每次只将很小一段时间(时间片,timeslicing)分给一个线程使用。 单个CPU在任一时刻只能执行一个线程。 操作系统通过在所有正在执行的线程间快速切换CPU,使得计算机看上去好像在同时执行多个计算,操作系统的并发功能,计算机通信与网络编程,电子科大计算机学院,#include #include pid_t fork(void) 返回: 父进程中返

4、回子进程的进程ID 子进程返回0 出错返回1 fork后,父子进程具有相同的数据空间、代码空间、堆栈、所有的文件描述字;但相互之间互不影响,计算机通信与网络编程,电子科大计算机学院,创建进程,#include #include #include #inlcude int sum; void main(void) int i; sum = 0; for(i=1; i=5; i+) printf(The value of i is %dn,i); fflush(stdout); sum += i; printf(The sum is %dn,sum); ,计算机通信与网络编程,电子科大计算机学院,

5、一个顺序执行的C实例,#include #include #include #inlcude int sum; int main(void) int i; sum = 0; fork() ; for(i=1; i=5; i+) printf(The value of i is %dn,i); fflush(stdout); sum += i; printf(The sum is %dn,sum); exit(0); ,计算机通信与网络编程,电子科大计算机学院,程序的并发版本,问题:若把循环次数增加到10000次,试想输出会怎样?,#include #include #include #inlc

6、ude int mul,sum; int main(void) int i,pid; sum = 0; mul = 1; if(pid=fork() 0) for(i=1; i=5; i+) printf(The value of i is %dn,i); fflush(stdout); sum += I; printf(The sum is %dn,sum); else if (pid = 0) for (i=1; i=5; i+) printf(The value of i is %dn,i); fflush(stdout); mul *= i; printf(The multiplex

7、is %dn,mul); exit(0);,计算机通信与网络编程,电子科大计算机学院,另一并发版本,include int execl(const char *path, const char *arg, .); 系统调用execl执行另一个程序。但调用execl并不创建新进程,所以前后的进程ID并未改变,execl只是用另一个新程序替换了当前进程的正文、数据、堆栈; path 是要执行的二进制文件或脚本的完整路径。 arg是要传给程序的完整参数列表,包括arg0,一般是执行程序的名字。 最后一个参数可为NULL。,计算机通信与网络编程,电子科大计算机学院,执行新的代码,int mul; in

8、t main(void) int i,pid; mul = 1; if(pid=fork() 0) execl(./sum,./sum,NULL); else if (pid = 0) for (i=1; i=5; i+) printf(The value of i is %dn,i); fflush(stdout); mul *= i; printf(The multiplex is %dn,mul); else exit(1); exit(0); ,计算机通信与网络编程,电子科大计算机学院,执行新程序的例子,OS的时间分片机制保证快速切换 线程切换的时候,会发生上下文切换 上下文:线程的执

9、行环境 切换的开销 设计协议软件的时候,需要设法将上下文切换的次数减到最少 保证并发处理的好处比上下文切换的开销多 服务器的设计策略包括:非并发,单线程进程并发,多线程进程并发,计算机通信与网络编程,电子科大计算机学院,上下文切换,某些OS允许单个线程控制并发的输入输出操作 线程使用select询问操作系统I/O设备的情况 例子: 用户从TCP接收数据并且显示,还允许用户从键盘输入命令控制显示。 两个输入:TCP连接, 键盘 总是等着一个输入,会阻塞 使用select询问输入是否就绪,计算机通信与网络编程,电子科大计算机学院,并发和异步I/O,并发可以减少网络客户的服务等待 服务器中的并发需要

10、编程实现 fork和execve的使用 操作系统中的并发实现:时间分片 并发的代价:上下文切换 Select调用允许单个的进程管理并发I/O,计算机通信与网络编程,电子科大计算机学院,总结,The fflush function flushes a stream. If the file associated with stream is open for output, fflush writes to that file the contents of the buffer associated with the stream. If the stream is open for input, fflush clears the contents of the buffer. fflush negates the effect of any prior call to ungetc against stream. Also, fflush(NULL) flushes all streams opened for output. The stream remains open after the call. fflush has no

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论