版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、网络中的并发处理课件网络游戏编程网络中的并发处理网络中的并发处理课件并发处理并行计算:微观意义上讲,两个或多个计算任务在同一时刻发生,即这些计算物理上同时发生,称之为并行计算。在计算机体系中,可以利用多用户的操作系统,使用多处理器实现真正的并行计算。并发处理:单处理器体系中,可以通过分时技术,在多任务间快速切换使用单处理器,从而模拟并行计算。无论是真正的并行计算,还是对并行计算的模拟,从宏观上看,都是为了实现多个计算任务同时向前推进。计算机系统同时处理多任务的方式,可以称为并发处理。网络中的并发处理课件并发处理并发处理的应用1并发处理可以出现在同一网络的主机中,许多对应用程序可以并发通信,分享
2、网络。2并发处理也可以出现在特定的计算机系统中。例如,在一个分时系统中的多用户。3一组机器上的多用户也可以并发处理。当在多主机上运行客户端时,可以实现并发处理;一个多任务操作系统也可允许在单个主机上并发运行多份程序拷贝。多主机上的多用户并行处理,多任务操作系统允许单台计算机上多份拷贝并行处理网络中的并发处理课件并发处理客户端的并发处理客户端的并发处理客户端软件通常不需要实现并发处理。如果操作系统运行多用户分别打开客户端,多个客户端之间的并发是自动处理的。一个客户端程序就像任何普通的应用程序一样,不需要明确的管理其并发运算。服务器端的并发处理服务器端的并发处理服务器端必须同时处理多个请求。服务器
3、端软件必须通过明确的编程过程处理同时发生的数据请求。服务器端处理多个数据请求网络中的并发处理课件进程进程进程不同于程序(program)。因为进程是处于活动执行状态中的,而不是指保存在磁盘中的文件。当代码被载入计算机时,操作系统允许执行一个或多个相应的实例。并发处理操作系统允许多个进程在同一时间执行同样的代码片段。这意味着每个进程的运行都是独立的,在一个单CPU架构中,从微观角度看,在特定时刻CPU只能执行一个进程。操作系统迅速在不同的进程间切换,似乎在同一时刻执行了多个进程。从人的观察角度看,很多进程正在同时执行。我们使用并发运行来阐述这样的概念,它意味着“显得同时执行”。 在一个单CPU系
4、统中,操作系统执行并发处理。在多CPU系统中,每一个CPU都同时与其他CPU共同执行进程。当然,编程人员在进行并发编程时,不需要知道底层硬件由单CPU还是多CPU构成。网络中的并发处理课件线程什么是线程?一些操作系统提供了并发处理的第二种形式并发执行线程。线程也拥有自己的指令指针以及本地变量的拷贝,并且相对于其他线程独立运行。线程机制不同于进程机制,但是每一个线程必须依附于一个单独的进程。虽然每个线程都有本地变量的拷贝,但是所有线程都分享全局变量的单份拷贝。更重要的是,在一个线程中的所有线程将分享操作系统分配给进程的资源,包括网络通信所使用的描述符。一个并发程序能够通过创建多个独立的进程来实现
5、,也可以通过创建一个多线程的进程来实现多线程设计的一个潜在缺陷在于相互间的冲突。因此,编写多线程代码的程序员必须要避免造成这样的问题。网络中的并发处理课件线程过程调用在面向过程的编程语言中,所执行的代码能够包含对子程序的调用。如果同时执行多线程代码,这些线程能够访问被调用函数的不同位置。 面向过程的编程语言在过程调用中将使用堆栈系统。在不同的线程中使用了独立的过程调用。当多线程并发执行一段代码时,每一个线程都有独立的活动记录堆栈。网络中的并发处理课件线程实例(非多线程版本):#include #include #include int addem(int);int main(int argc,
6、 char *argv)addem(5); return 0 ; int addem(int count)int i, sum; /* 定义局部变量*/sum = 0;for (i=1 ; i=count ; i+) /* 从1到count的循环 */printf(The value of i is %dn, i);fflush(stdout);/* 更新输出缓冲区*/sum += i;printf (The sum is %dn, sum);fflush(stdout);return 0;/* 终止运行 */程序执行结果为:The value of i is 1The value of i
7、is 2The value of i is 3The value of i is 4The value of i is 5The sum is 15网络中的并发处理课件线程实例(多线程版本):#include #include #include int addem(int);int main(int argc, char *argv)_beginthread(void (*) (void *)addem, 0, (void *)5); addem(5); return 0;int addem(int count)int i, sum; /* 定义局部变量 */sum = 0;for (i=1
8、; i=count ; i+) /*从1到count的循环*/printf(The value of i is %dn, i);fflush(stdout); /* 更新输出缓冲区*/sum += i;printf (The sum is %dn, sum);fflush(stdout);return 0; /*终止运行 */ 程序执行结果为:The value of i is 1The value of i is 1The value of i is 2The value of i is 3The value of i is 4The value of i is 5The value of
9、i is 2The value of i is 3The value of i is 4The value of i is 5The sum is 15The sum is 15网络中的并发处理课件线程分时机制线程的执行不是其中一个执行完毕之后再去执行另一个的,而是多个线程交叉执行。通常,线程间需要竞争CPU资源,操作系统将CPU的运算能力分配给一个线程很短的时间,随后分配给另一个线程。我们使用时间片来描述系统分配给线程的可用时间。分时机制试图在所有线程之间平等分配计算资源。从人的角度看,不管有多少进程,这些线程似乎都在以同样的速度同步执行。线程越多时,速度越低;线程越少时,速率越高。分时机制
10、的效果可以通过在不同时间片的计算机系统上运行的执行情况进行对比。例如,上述程序可能在另一个系统上的时间片执行1000次循环,而不是5次。网络中的并发处理课件线程实例(并发版本): #include #include #include int addem(int);int main(int argc, char *argv)_beginthread(void (*) (void *)addem, 0, (void *)10000); addem(10000) ; return 0 ;int addem(int count)int i, sum;/* 定义局部变量 */sum = 0 ;for (
11、i=1 ; i=count ; i+) /* 从1到count循环 */printf(The value of i is %dn, i);fflush(stdout);/* 更新输出缓冲区 */sum += i;printf(The sum is %dn, sum);fflush(stdout);return 0 ;/* 终止运行 */ 网络中的并发处理课件线程当并发执行该程序时,将打印20,002行结果。然而,这些结果的顺序将取决于操作系统。在上例中,父线程和子线程都执行同一个子程序addem,这种情况在真正的实际应用中很少发生。事实上,各个线程往往分别执行不同的子程序。多个线程是怎样区分所
12、需要执行的子程序的呢?答案在于_beginthread的第二个参数,该参数指定了新创建的子线程所需要执行的子程序。与此同时,父线程继续执行_beginthread调用点之后的代码。为了保障所有线程并发执行,操作系统需要使用时间片。而CPU在不同的线程间切换时,必须切换所需要执行的线程的上下文环境(context)。切换上下文环境必须使用CPU的运算能力,当CPU忙于切换时,将减少提供给运行应用程序的线程本身的时间。编程人员应当特别注意,加入更多的线程时,需要确保加入并发线程的利益大于在并发线程间切换上下文环境的系统代价。网络中的并发处理课件并发机制UNIX中的并发机制中的并发机制与Window
13、s中提供了线程机制不同,UNIX提供了一种进程提取机制。当应用程序开始执行时,UNIX将创建一个进程执行该应用程序。当需要并发处理时,UNIX应用程序将调用fork函数。与Windows中的_beginthread类似,fork是UNIX操作系统提供的系统函数。当fork被调用时,将创建另外一个进程,该进程将执行与父进程几乎同样的代码。但创建一个完全一致的拷贝,实际上是没用的。新的进程并不与父进程完全一致。两个进程的区别在于:fork函数返回的值不同。在新创建的进程中,fork返回值为0。在父进程中,fork将返回一个小的正整数。在通常情况下,代码包含一个额外的条件语句,用于检测fork的返回
14、值是否为0。网络中的并发处理课件并发机制UNIX中的并发机制中的并发机制实例代码:#include #include int sum;main(int argc, char *argv) int pid; sum = 0 ;pid = fork();if (pid != 0) /* 初始进程 */printf(The original process prints this.n); else /* 新创建的进程 */printf(The new process prints this.n);exit (0) ; pid变量记录下了fork调用的返回值。调用fork之后,条件语句将检测变量pid
15、的值,查看目前正在执行的进程是父进程,还是子进程。这两个进程将分布打印两条不同的提示信息并退出。网络中的并发处理课件并发机制执行独立编译的应用程序执行独立编译的应用程序除了fork机制外,Windows和UNIX都提供了相应的机制,允许任意进程停止执行一个应用程序,并开始执行保存在磁盘上的一个独立编译的应用程序。该机制包括一系列命名为exec的操作系统中的系统函数。exec的参数指定了可执行程序在磁盘中的名称,并将一系列参数提供给该程序,以及该程序将继承的环境变量。exec将完全更新进程。进程的代码和所有变量都将被替代,新的程序将建立新的运行时堆栈。在UNIX中,进程必须同时调用fork和exec,以此创建新进程。而在Windows中,可以利用一个CreateProcess函数执行fork和exec所有的任务。使用一个单独的应用程序的优点主要在于易于维护:当需要修改针对特定服务的代码时,只需要重新编译这段代码即可,不需要重新编译主服务
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 白土农田出租合同范本
- 租赁合同换签三方协议
- 装修签订承揽协议合同
- 基于数值模拟剖析沉积作用与深部甲烷通量对水合物成藏的影响
- 基于教育现象学视角:洞察小学教师教育机智与孩子体验的内在关联
- 2025建筑装修施工合同范本
- 基于改进图卷积神经网络的面部动作单元识别算法的深度探索与创新
- 基于改进人工鱼群算法的配电网无功优化研究:提升电力系统效能的新视角
- 基于改进HHT的桥梁结构震后损伤识别:理论、方法与实践
- 2025医疗耗材批发零售市场供需关系平衡研究产业投资决策优化规划发展评估报告
- 数字电子技术蜂考速成课
- 室内装修工程技术标书
- 《杀死一只知更鸟》读书分享PPT
- 中级企业人力资源管理考试题库含答案
- 招聘简章 招聘简章(4篇)
- GB/T 12008.7-2010塑料聚醚多元醇第7部分:黏度的测定
- 最新人教版八年级数学上册《第2课时-多项式与多项式相乘》优质教学课件
- 腮腺肿瘤的诊断和治疗课件
- 英文书写规范(仅供参考)
- 质量体系标准iso14050
- 《童心是小鸟》课件
评论
0/150
提交评论