EPOLL服务器编程.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
EPOLL服务器编程

EPOLL服务器编程 tigerzhou 目录 EPOLL简介 EPOLL的优点 EPOLL的使用 EPOLL的性能 高性能服务器 IO模型 服务模型 非阻塞 边界触发 服务器实现 接收连接 读取数据 发送数据 断开连接 EPOLL简介—EPOLL的优点 新一代内核 海量连接 高效事件触发 快速数据交换 EPOLL简介—EPOLL的性能 EPOLL简介—EPOLL的性能 连接建立速度测试 某个时刻连续向server发起大量连接请求,比较两种I/O模型下Server端的连接接收速度。在客户端记录下连接数完全建立后所花费的时间。以800个连接为例,做12组测试,去除一个最大及最小值后,取余下的10组数据的平均值作为最终结果. EPOLL简介—EPOLL的性能 连接数 Select(耗时:秒) Epoll(耗时:秒) 100 0 0 200 0 0 300 6 0 400 14 0 500 24 0 600 36 0.3 700 48 0 800 59 0 900 72 0 1000 84 0 结论: Select耗时线形增长,Epoll耗时无明显影响 EPOLL简介—EPOLL的性能 数据传输性能测试 client 端创建若干线程,每个线程与server建立一个连接。连接建立后向server发送取数据请求,然后读取server端返回的数据.如此反复循环。每个 client请求server返回的数据字节数为1K(1024bytes)大小.当连接全部建立后,系统稳定下来,记录此时的服务程序对应的CPU占用率及内存使用率。记录下12组数据供分析使用.分析结果中将除去一个最大值及最小值,取余下的10组数据的平均值作为最终结果。 EPOLL简介—EPOLL的性能 连接数 Select Epoll cpu% mem% cpu% mem% 100 28.06 0.3 21.74 0.3 200 43.66 0.3 40.50 0.3 300 47.09 0.3 42.73 0.3 400 59.04 0.3 44.55 0.3 500 54.44 0.3 51.00 0.3 600 63.38 0.3 50.76 0.3 700 65.77 0.3 51.47 0.3 800 70.52 0.3 52.80 0.3 900 73.56 0.3 53.37 0.3 1000 75.68 0.3 53.52 0.3 结论: 在连接数达到600~1000时,Epoll的CPU占用率比Select少 12% ~ 17%左右。 EPOLL简介—EPOLL的性能 支持一个进程打开大数目的socket描述符 select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。 epoll则没有这个限制,它所支持的FD上限是最大可以打开文件的数目,在1GB内存的机器上大约是10万左右,具体数目可以cat /proc/sys/fs/file-max察看,一般来说这个数目和系统内存关系很大。 EPOLL简介—EPOLL的性能 高效事件触发机制 传统的select/poll另一个致命弱点就是当你拥有一个很大的socket集合,不过由于网络延时,任一时间只有部分的socket是活跃的,但是select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。 epoll不存在这个问题,它只会对活跃的socket进行操作---这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么,只有活跃的socket才会主动的去调用 callback函数,其他idle状态socket则不会,在这点上,epoll实现了一个伪AIO,因为这时候推动力在os内核。 EPOLL简介—EPOLL的性能 网络缓冲区数据在内核空间和用户空间的快速交换 Relay提供了一种机制,使得內核空间的程序能够通过用戶定义的relay通道(channel)将大量数据高效的传输到用戶空间。 一个relay通道由一组和CPU一一对应的內核缓冲区组成。这些缓冲区又被称为relay缓冲区(buffer),其中的每一个在用户空间都用一个常规文件来表示,这被叫做relay文件(file)。 內核空间的用户可以利用relay提供的API接口来写入,这些数据会被自动地写入当前的CPU id对应的那个relay缓冲区;同时,这些缓冲区在用户空间看来,是一组普通文件,可以直接使用read()进行读取,也可以使用mmap()进行映射。 EPOLL简介—EPOLL的性能 Relay模型图 EPOLL简介—EPOLL的使用 总共就三个函数: 1.?int?epoll_create(int?si

文档评论(0)

zhuwenmeijiale + 关注
实名认证
内容提供者

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

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档