计算机编程第11章 高并发服务器.pptxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11章 高并发服务器;目录页;目录页;为提高服务器效率,服务器应能同时被多个客户端进程使用,且能处理多个用户请求,实际上,我们在生活、应用中接触到的服务器,都能实现并发功能。;在多进程并发服务器中,若有用户请求到达,服务器将会调用fork()函数,创建一个子进程,之后父进程将继续调用accept(),而子进程则去处理用户请求。;;说明: (1)多进程并发服务器效率高且更加稳定,服务器中的进程不会受其它进程状态的影响; (2)多进程并发服务器中进程数量受可打开文件描述符的限制; (3)多进程并发服务器中进程数量受内存容量限制。;目录页;考虑到每个进程可打开的文件描述符数量有限,且进程占用资源较多,系统中进程的数量又受到内存大小的限制,为在保证服务器效率的前提下,降低服务器的消耗,可利用多线程机制搭建并发服务器。;;与多进程服务器相比: (1)线程占用的空间资源大大减少,因此内存堆服务器的限制也被降低; (2)多线程并发服务器稳定性较差。 因此在搭建服务器时,应从需求出发,选择更为合适的服务器。;目录页;为进一步提升服务器效率,人们提出了一种被称为I/O多路转接的模型。其中“多路”指代连接到服务器的多个客户端程序,而“转接”则是指在服务器主线与各分支之间设置一个“岗位”,由该岗位实现监控多路连接中数据状态的功能,若某路连接中数据就绪,就通知服务器,使主程序对该路请求作出处理。;与多进程和多线程并发服务器相比,I/O多路转接服务器实现了I/O多路复用,系统不必创建多进程或多线程,也不必维护多个进程或线程,因此大大降低了系统开销。 Linux系统中提供了select()、poll()和epoll()函数来实现I/O多路转接,下面将对这几种机制进行详细讲解与演示。;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;目录页;epoll有两种工作模式,分别为边缘触发(Edge Triggered)模式和水平触发(LevelTriggered)模式。;epoll的工作模式在调用注册函数epoll_ctl()时确定,由该函数中参数event的成员events指定,默认情况下epoll的工作模式为水平触发,若要将其设置为边缘触发模式,需使用宏EPOLLET对event进行设置,具体示例如下。 event.events=EPOLLIN|EPOLLET; 之后需在循环中不断调用,保证将文件描述符中的数据全部读出。;说明: ET模式只能工作在非阻塞模式下,否则单纯使用epoll(单进程)将无法同时处理多个文件描述符,因此在实现案例之前,需先掌握设置文件描述符状态的方法,Linux系统中可使用fcntl()函数来设置文件描述符的属性。;fcntl()函数是Linux中的一个系统调用,其功能为获取或修改已打开文件的性质,该函数存在于函数库fcntl.h中,其声明如下: int fcntl(int fd, int cmd, ... /* arg */ ); 其中参数fd为被操作的文件描述符,cmd为操作fd的命令(具体取值可参见Linux的manpage),之后的arg用来接收命令cmd所需使用的参数,该值可为空。;若要通过fcntl()设置文件描述符状态,通常先使用该函数获取fd的当前状态,再对获取的值进行位操作,最后调用fcntl()将操作的结果重新写回文件描述符。如下为修改文件描述符阻塞状态的方法: flag = fcntl(fd, F_GETFL); //宏F_GETEL表示获取文件描述符相关属性 flag |= O_NONBLOCK; fcntl(fd, F_SETFL, flag); //使用新属性设置文件描述符;;;;11.5 本章小结

文档评论(0)

东山书苑 + 关注
实名认证
文档贡献者

业务以学生学习成长为中心,为外语培训、中小学基础教育、学前教育,提供各种学习资料支持服务。

1亿VIP精品文档

相关文档