计算机网络编程第九讲并发服务器ppt课件

上传人:公**** 文档编号:567489741 上传时间:2024-07-20 格式:PPT 页数:27 大小:1.12MB
返回 下载 相关 举报
计算机网络编程第九讲并发服务器ppt课件_第1页
第1页 / 共27页
计算机网络编程第九讲并发服务器ppt课件_第2页
第2页 / 共27页
计算机网络编程第九讲并发服务器ppt课件_第3页
第3页 / 共27页
计算机网络编程第九讲并发服务器ppt课件_第4页
第4页 / 共27页
计算机网络编程第九讲并发服务器ppt课件_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《计算机网络编程第九讲并发服务器ppt课件》由会员分享,可在线阅读,更多相关《计算机网络编程第九讲并发服务器ppt课件(27页珍藏版)》请在金锄头文库上搜索。

1、 第九讲第九讲 并发效力器并发效力器多进程实现并发(第11章)多线程实现并发(第12章)单线程实现并发(第13章)目录目录并发的面向衔接的效力器并发的面向衔接的效力器采用算法采用算法8.48.4的最常用的效力器设计的最常用的效力器设计主效力器进程在机器启动的时候自动不断运转,主效力器进程在机器启动的时候自动不断运转,对每个客户的新衔接创建一个新的从线程对每个客户的新衔接创建一个新的从线程/ /进程进进程进展处置展处置并发并发ECHOECHO的例子的例子多进程每个进程含一个线程设计的并发效力多进程每个进程含一个线程设计的并发效力器器多线程属于同一个进程设计的并发效力器多线程属于同一个进程设计的并

2、发效力器单线程设计的并发效力器单线程设计的并发效力器并发效力器概述并发效力器概述功能:功能:客户翻开到某个效力器的衔接,然后在该衔接上反客户翻开到某个效力器的衔接,然后在该衔接上反复发送数据,并读取从效力器前往的回显,复发送数据,并读取从效力器前往的回显,效力器呼应每个客户,接受衔接,读取来自该客户效力器呼应每个客户,接受衔接,读取来自该客户的数据,并原样前往给客户。的数据,并原样前往给客户。效力器在发送呼应前并非读取全部输入,只是交替效力器在发送呼应前并非读取全部输入,只是交替读写读写效力器在遇到文件终了的条件后,封锁衔接效力器在遇到文件终了的条件后,封锁衔接并发并发ECHOECHO假设运用

3、循环效力器实现假设运用循环效力器实现某些客户能够发送大量的数据,导致其他的客户延某些客户能够发送大量的数据,导致其他的客户延迟迟运用并发效力器实现运用并发效力器实现防止了长时间的延迟,不允许单个客户占用一切的防止了长时间的延迟,不允许单个客户占用一切的资源资源使效力器与许多客户同时进展通讯使效力器与许多客户同时进展通讯客户觉得效力器提供了较短的呼应时间客户觉得效力器提供了较短的呼应时间循环与并发实现的比较循环与并发实现的比较效力器包括一个主进程,以及零个或者多个从进程。效力器包括一个主进程,以及零个或者多个从进程。每个进程一个线程每个进程一个线程主效力器运用主效力器运用acceptaccept

4、阻塞调用,节约阻塞调用,节约CPUCPU资源,衔接资源,衔接到来的时候,到来的时候,acceptaccept马上前往。马上前往。进程构造进程构造用于单个衔用于单个衔接的套接字接的套接字用于衔接恳用于衔接恳求的套接字求的套接字主进程主进程从进程从进程1从进程从进程2从进程从进程3操作系统操作系统效力器运用进程效力器运用进程或线程或线程#include #include 语句语句变量定义,宏定义,函数声明变量定义,宏定义,函数声明主函数主函数参数处置参数处置建立被动套接字建立被动套接字循环等待衔接,假设有新衔接,那么循环等待衔接,假设有新衔接,那么forkfork一个新的一个新的线程,调用线程,调

5、用TCPechodTCPechod进展处置进展处置TCPechodTCPechod函数函数处置处置echoecho效力效力并发并发ECHOECHO效力器举例效力器举例运用运用forkfork的效力器动态生成进程,能够导致不完的效力器动态生成进程,能够导致不完全的进程终止全的进程终止linuxlinux在一个子进程退出的时候,会给父进程一个在一个子进程退出的时候,会给父进程一个信号信号signal)signal)正在退出的进程坚持在死形状,直到父进程执行正在退出的进程坚持在死形状,直到父进程执行wait3wait3系统调用为止系统调用为止signalsignalSIGCHLD, reaper)S

6、IGCHLD, reaper)主效力器进程收到子主效力器进程收到子进程退出信号的时候,执行函数进程退出信号的时候,执行函数reaperreaper函数函数reaperreaper调用函数调用函数wait3wait3完成子进程的终止并退完成子进程的终止并退出。出。参数参数WNOHANGWNOHANG指明指明wait3wait3不要为了进程退出而阻塞不要为了进程退出而阻塞等待等待去除游离进程去除游离进程面向衔接的并发技术面向衔接的并发技术运用多进程的方式实现:运用多进程的方式实现:forkfork主进程的线程永远不会和任何客户打交道,只接受主进程的线程永远不会和任何客户打交道,只接受衔接,创建一个

7、从进程处置各个衔接衔接,创建一个从进程处置各个衔接从进程从主进程调用从进程从主进程调用forkfork后立刻执行后立刻执行主进程封锁新衔接所用的描画符的副本主进程封锁新衔接所用的描画符的副本从进程封锁主描画符的副本从进程封锁主描画符的副本小结小结一个进程中有一个或者多个线程一个进程中有一个或者多个线程linuxlinux中的线程符合中的线程符合POSIXPOSIX线程规范,线程规范,1003.1c1003.1clinuxlinux中线程的特点中线程的特点动态创建:动态创建:pthread_createpthread_create,具有上限,具有上限并发执行:多处置机上可以并行并发执行:多处置机

8、上可以并行抢先:系统自动在多个线程中调动抢先:系统自动在多个线程中调动CPUCPU资源资源私有部分变量:每个线程有本人的私有堆栈私有部分变量:每个线程有本人的私有堆栈, ,存放部存放部分变量分变量共享全局变量:一个进程的一切线程共享全局变量共享全局变量:一个进程的一切线程共享全局变量共享文件描画符:一个进程内的一切线程共享一组文共享文件描画符:一个进程内的一切线程共享一组文件描画符件描画符协调和同步函数:具有线程协调和同步执行的函数协调和同步函数:具有线程协调和同步执行的函数运用线程来实现并发运用线程来实现并发(TCP,(TCP,算法算法8.4)8.4)多线程的进程和单线程的进程比较多线程的进

9、程和单线程的进程比较更高的效率:上下文切换的额外开销减少更高的效率:上下文切换的额外开销减少上下文切换:线程切换需求执行的指令上下文切换:线程切换需求执行的指令同一进程中的两个线程比不同进程中的两个线程切同一进程中的两个线程比不同进程中的两个线程切换要快换要快进程内的线程切换不用改动虚拟存储器的映射进程内的线程切换不用改动虚拟存储器的映射共享存储器:共享存储器:并发效力器中的多个副本需求相互通讯或者访问共并发效力器中的多个副本需求相互通讯或者访问共享的数据享的数据利用线程容易构造监控系统利用线程容易构造监控系统线程的优点线程的优点由于线程间共享存储器和进程形状,一个线程的动由于线程间共享存储器

10、和进程形状,一个线程的动作能够对同一个进程内的其他线程产生影响。作能够对同一个进程内的其他线程产生影响。两个线程假好像一时辰访问同一个变量,会产生相两个线程假好像一时辰访问同一个变量,会产生相互关扰互关扰将指针前往给一个静态的数据项的库函数不是线程将指针前往给一个静态的数据项的库函数不是线程平安平安(thread safe)(thread safe)的,覆盖将会导致错误的,覆盖将会导致错误缺乏强壮性,一个线程出错,效力器将会终止整个缺乏强壮性,一个线程出错,效力器将会终止整个进程进程线程的缺陷线程的缺陷许多动态分配的资源都是和进程相关的许多动态分配的资源都是和进程相关的一个线程翻开某个文件,同

11、一进程的其他线程也可一个线程翻开某个文件,同一进程的其他线程也可以运用同一个描画符访问文件以运用同一个描画符访问文件虽然有些操作系统调用只会影响调用它的线程虽然有些操作系统调用只会影响调用它的线程I/OI/O调用阻塞,只影响调用它的线程;调用阻塞,只影响调用它的线程;但是有些系统调用会影响整个进程但是有些系统调用会影响整个进程exitexit函数会让整个进程退出函数会让整个进程退出线程的退出方法线程的退出方法线程的顶级过程前往时终止该线程线程的顶级过程前往时终止该线程调用调用pthread_exitpthread_exit终止该线程终止该线程描画符、延迟和退出描画符、延迟和退出线程协调和同步是

12、必要的线程协调和同步是必要的线程能够被阻塞。线程能够被阻塞。线程的同步机制:互斥,信号量,条件变量线程的同步机制:互斥,信号量,条件变量互斥互斥对共享数据的排他性访问对共享数据的排他性访问pthread_mutex_init,pthread_mutex_init,产生并初始化一个互斥产生并初始化一个互斥pthread_mutex_lock, pthread_mutex_lock, 运用共享数据前调用运用共享数据前调用pthread_mutex_unlockpthread_mutex_unlock,运用共享数据后释放,运用共享数据后释放线程的协调与同步线程的协调与同步信号量:同步机制信号量:同步

13、机制用于系统中有用于系统中有N N个资源可用的情况允许个资源可用的情况允许N N个线程同时个线程同时执行运用执行运用sem_initsem_init,初始化一个信号量,初始化一个信号量sem_wait, sem_wait, 线程运用一个资源前必需调用线程运用一个资源前必需调用sem_postsem_post,运用完后返还资源,运用完后返还资源线程的协调与同步线程的协调与同步条件变量条件变量最复杂和难以了解的一种同步机制最复杂和难以了解的一种同步机制一组线程运用互斥对同一个资源提供排它性访问。一组线程运用互斥对同一个资源提供排它性访问。一旦某个线程获得资源,它需求等待一个特定的一旦某个线程获得资

14、源,它需求等待一个特定的条件发生条件发生pthread_cond_wait: pthread_cond_wait: 同时指定了等待的条件变同时指定了等待的条件变量和所拥有的互斥,执行后阻塞。量和所拥有的互斥,执行后阻塞。pthread_cond_signalpthread_cond_signal只允许一个线程继续执行只允许一个线程继续执行pthread_cond_broadcastpthread_cond_broadcast允许多个线程继续执行允许多个线程继续执行等待条件变量的时候要暂时放弃互斥等待条件变量的时候要暂时放弃互斥得到条件变量的时候自动重新获得互斥得到条件变量的时候自动重新获得互斥

15、线程的协调与同步线程的协调与同步多线程的多线程的ECHOECHO效力效力并发的面向衔接的算法并发的面向衔接的算法衔接到达后,调用衔接到达后,调用pthread_createpthread_create创建一个新的线创建一个新的线程来处置衔接。程来处置衔接。新线程执行新线程执行TCPechodTCPechod过程。过程。TCPmtechod.c page110TCPmtechod.c page110线程处置函数线程处置函数统计构造的互斥运用统计构造的互斥运用互斥处置函数互斥处置函数运用线程效力器实例运用线程效力器实例采用一个独立的线程采用一个独立的线程prstatsprstats打印统计信息打印

16、统计信息每睡眠每睡眠INTERVALINTERVAL打印一次打印一次监控线程和从线程运用一个共享的全局数据构造:监控线程和从线程运用一个共享的全局数据构造:statsstats相互通讯相互通讯采用互斥的机制:采用互斥的机制:stats.st_mutexstats.st_mutex实践的效力器监控程序可以让管理员以更加复杂的实践的效力器监控程序可以让管理员以更加复杂的方式和效力器交互方式和效力器交互可以控制效力器可以控制效力器可以按需提供信息可以按需提供信息可以得到更加全面的信息可以得到更加全面的信息监控监控并发效力器可以在一个进程中用假设干线程实现并发效力器可以在一个进程中用假设干线程实现优点

17、是:优点是:开销少开销少共享存储器共享存储器可以监控可以监控缺陷是:缺陷是:添加了编程的复杂性添加了编程的复杂性必需运用同步机制协调线程对全局变量和一些库必需运用同步机制协调线程对全局变量和一些库程序的访问程序的访问必需弄清一些能够影响整个进程的系统函数必需弄清一些能够影响整个进程的系统函数小结小结大多数并发效力器运用前面提供的两种方法,运用大多数并发效力器运用前面提供的两种方法,运用操作系统的设备创建独立的进程或者线程,利用分操作系统的设备创建独立的进程或者线程,利用分时来占用途置器时来占用途置器运用单线程也可以提供外表上的并发性运用单线程也可以提供外表上的并发性为什么是可行的为什么是可行的

18、什么时候比较好什么时候比较好如何实现如何实现单线程并发效力器单线程并发效力器( (算法算法8.5)8.5)对一个恳求的呼应中假设对一个恳求的呼应中假设I/OI/O占了主导位置,效力占了主导位置,效力器可以运用异步器可以运用异步I/OI/O来实现外表并发性,运用数据来实现外表并发性,运用数据触发处置。触发处置。ECHOECHO效力器效力器实际上是时间分片机制让多线程共享实际上是时间分片机制让多线程共享CPUCPU实践上是数据的到达控制了处置的进展实践上是数据的到达控制了处置的进展每个从线程大部分时间花在每个从线程大部分时间花在readread的阻塞上的阻塞上假设并发效力器处置每个恳求仅需求很少时

19、间,假设并发效力器处置每个恳求仅需求很少时间,可以由数据到达驱动。可以由数据到达驱动。在任务量太大,以致在任务量太大,以致CPUCPU不能顺序执行的时候,分不能顺序执行的时候,分时机制才取而代之时机制才取而代之效力器中的数据驱动处置效力器中的数据驱动处置了解单线程如何完成并发效力器义务了解单线程如何完成并发效力器义务翻开许多客户的翻开许多客户的TCPTCP衔接衔接线程阻塞等待数据的到达线程阻塞等待数据的到达任何一个衔接上有数据到达,线程就被唤醒任何一个衔接上有数据到达,线程就被唤醒处置恳求,发送呼应后,再次阻塞,等待处置恳求,发送呼应后,再次阻塞,等待 另一个另一个衔接上数据到达衔接上数据到达

20、同多线程或者多进程比较,能够处置略高些的负荷同多线程或者多进程比较,能够处置略高些的负荷由于减少了上下文切换开销由于减少了上下文切换开销关键是运用关键是运用OSOS的的selectselect原语实现异步原语实现异步I/OI/O算法算法8.58.5列出了实现列出了实现用单线程进展数据驱动处置用单线程进展数据驱动处置单线程、并发效力器的线程和套接字构造单线程、并发效力器的线程和套接字构造一个执行线程管理一切的套接字一个执行线程管理一切的套接字单线程效力器的线程构造单线程效力器的线程构造用于单个衔用于单个衔接的套接字接的套接字用于衔接恳用于衔接恳求的套接字求的套接字效力器效力器操作系统操作系统效力

21、器运用进程效力器运用进程单线程效力器必需完成主线程和从线程双方的职责单线程效力器必需完成主线程和从线程双方的职责维护一组套接字维护一组套接字组中某套接字绑定到接受衔接的熟知端口上组中某套接字绑定到接受衔接的熟知端口上其它套接字对应一个衔接其它套接字对应一个衔接效力器把这组套接字描画符作为一个参数传送给效力器把这组套接字描画符作为一个参数传送给selectselect,并等待任何一个套接字的活动,并等待任何一个套接字的活动运用描画符来区别主线程和从线程的操作运用描画符来区别主线程和从线程的操作主套接字描画符预备就绪,运用主线程的操作主套接字描画符预备就绪,运用主线程的操作从套接字的描画符就绪,运

22、用从线程的操作从套接字的描画符就绪,运用从线程的操作单线程效力器的线程构造单线程效力器的线程构造TCPmechod.c page118TCPmechod.c page118在熟知端口上翻开一个被动套接字在熟知端口上翻开一个被动套接字运用系统函数运用系统函数getdtablesizegetdtablesize来决议描画符最大个来决议描画符最大个数数运用运用FD_ZEROFD_ZERO和和FD_SETFD_SET创建一个比特向量,对应创建一个比特向量,对应于希望测试的套接字描画符于希望测试的套接字描画符selectselect等待一个或者多个描画符就绪等待一个或者多个描画符就绪FD_ISSETFD

23、_ISSET测试哪个描画符就绪测试哪个描画符就绪FD_CLRFD_CLR封锁衔接后,从描画符组中删除封锁衔接后,从描画符组中删除单线程的单线程的ECHOECHO效力器效力器Select调用时,根据描画符集中被设置的位得到描画符值,进而找到对应的套接字构造,看能否有数据就绪读/写/异常就绪,没有就绪的描画符在描画符集中对应位就被清0,所以每次调用select前都要将我们所关怀的描画符在描画符集中置1.select前往描画符集中曾经预备好的总位数。SelectSelect原理原理并发效力器通常是数据驱动的,不是下层操作系统并发效力器通常是数据驱动的,不是下层操作系统中的时间分片机制驱动的中的时间分片机制驱动的效力处置很少的情况下,单线程运用异步效力处置很少的情况下,单线程运用异步I/OI/O管理管理多个衔接,和多线程实现一样高效多个衔接,和多线程实现一样高效单线程实现中,一个执行线程完成了主线程和从线单线程实现中,一个执行线程完成了主线程和从线程的职责程的职责一组描画符表一组描画符表运用运用selectselect函数函数ECHOECHO效力器的例子效力器的例子小结小结

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号