`
阿尔萨斯
  • 浏览: 4183526 次
社区版块
存档分类
最新评论

完成端口之性能优化(1)

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
本文作者:sodme 本文出处:http://blog.csdn.net/sodme
版权声明:本文可以不经作者同意任意转载,但转载时烦请保留文章开始前两行的版权、作者及出处信息。

  完成端口的主要优点在哪里?
  完成端口的最大优点在于其管理海量连接时的处理效率,通过操作系统内核的相关机制完成IO处理的高效率。注意:完成端口的优点在于管理连接量的巨大,而不是传输数据量的巨大。在这种场合最适合用完成端口:连接量巨大,且每个连接上收发的数据包容易比较小,通常只有几K甚至不到1K的字节。
  既然完成端口处理的是海量连接问题,那么我们对完成端口的优化则也应该首先放在海量连接的相关管理上。为此,我们引入“池”的概念。
  在完成端口的设计中,“池”几乎是必须采用的原则。这里的“池”包含有多个方面,分为:线程池,内存池,连接池等等。下面,将逐一介绍这些“池”的含义及用途,稍后的文章里,如果可能的话,我会给出采用了“池”和未采用“池”两种情况下的效率对比,你将会发现“池”是多么地可爱。
  在大型在线系统中,数据空间的频繁创建和释放是相当占用系统资源的。为此,在数据空间的管理上,我们引入了“内存池”。
  大家知道,在每一次的wsasend和wsarecv中,我们都要投递一个结构体变量。这个结构体变量的创建和释放,可以有多种方式。
  方式一:即用即创建,即每次执行wsasend和wsarecv时都声明一个新的结构体空间,GET完成后在工作者线程中销毁;
  方式二:只有每出现一个新的连接时,我们才随新连接建立一个新的结构体空间,将它与新的客户端socket绑定在一起,只有当客户端socket关闭时才将它与客户端对象一起销毁;
  方式三:建立一定量的结构体空间,并将其统一放入一个空闲队列,不管何时执行wsasend和wsarecv,都先从空闲队列里取一个结构体空间来用,用完后,将其放回空闲队列。
  从执行的效率及实现的便捷性方面考虑,建议采用方式3的形式管理这些空闲结构体空间。采用方式3的难点在于,到底创建多少个结构体空间才是比较合适的?这可能取决于你在自己服务器上作的完成端口的处理效率,如果完成端口的处理效率比较高,那么需要的队列长度可能就比较小,如果完成端口的处理效率低,那么队列长度就要大一点。
  下面说说“连接池”。我们知道,使用传统的accept接收客户端的一个连接后,此函数会返回一个创建成功的客户端socket,也就是说,此函数自己完成了socket的创建工作。非常好的是,windows给我们提供了另一个函数,允许我们在接受连接之前就事先创建一个socket,使之于接受的连接相关联,这个函数就是acceptEx,在acceptEx的参数中,SOCKET类型的参数值是我们事先用socket函数创建完成的一个socket,在调用acceptEx时,把这个已经创建好的socket传给acceptEx。说到这里,明白的人可能已经偷笑了--既然这样,那岂不是允许我们在接受连接之前就创建好一大堆的socket等着acceptEx来用吗?这就省去了临时创建一个socket的系统开销呀?呵呵,事实确实如此。在实际操作中,我们可以事先创建好一大堆的socket,然后接受客户端连接的函数使用acceptEx。这一大堆的socket,我们可以形象地称之为“socket连接池”(当然,也许在更多的场合,我们听到的是“数据库连接池”的概念),这个名字是我自己取的,听着觉得不舒服的兄弟,干脆就叫它“socket池”吧,哈哈。
  线程池的概念,相信作过多线程的朋友都会有所耳闻。在此处的文字中,就不对它再多加介绍了,感兴趣的朋友可以自己去GOOGLE一下。我这里说的线程池,不仅仅指由完成端口自己负责维护的那个工作者线程池,还指我们建立在完成端口模型基础之上的线程池。这个线程池里又具体分为执行逻辑线程池和发送线程池。当然,也有人建议执行逻辑线程只要一条就行了,没必要用多条,而且同步会非常麻烦。我赞同这种说法以,但前提是,这样的设计,要求你对服务器功能的划分要相当合理,否则会让这一条线程累得够呛。
  未完待续。




分享到:
评论

相关推荐

    IOCP完成端口之性能优化

    文档:完成端口之性能优化,别人的帖子,整理了一下,有用的下

    Delphi高性能完成端口模型IOCP

    本例程可以作为初学者的学习之用,亦可以作为大型服务程序的通讯模块。其处理速度可以说,优化到了极点。如果理解了本例程的精髓,加上一个高效的通讯协议,你完全可以用它来构建一个高性能的通讯服务器。

    高性能IOCP完成端口模型

    网上找的IOCP完成端口代码,测试可以实现512Byte 60000包/秒,CPU 10%,单线程,性能已经很好,对代码进行了X64修改,已全面支持X64,准备进一步优化。

    高性能的socket通讯服务器(完成端口模型--IOCP)

    本例程可以作为初学者的学习之用,亦可以作为大型服务程序的通讯模块。其处理速度可以说,优化到了极点。如果理解了本例程的精髓,加上一个高效的通讯协议,你完全可以用它来构建一个高性能的通讯服务器。

    SQLServer安全及性能优化

    SQLServer安全及性能优化 修补漏洞 安装程序补丁修补漏洞 随时关注微软官方网站补丁升级 关闭不必要的端口 关闭联必要的服务 数据库引擎 SQL Server Analysis Services SQL Server Reporting Services SQL ...

    什么是VLAN

    例如,一个交换机的1,2,3,4,5端口被定义为虚拟网AAA,同一交换机的6,7,8端口组成虚拟网BBB。这样做允许各端口之间的通讯,并允许共享型网络的升级。但是,这种划分模式将虚拟网限制在了一台交换机上。  第二...

    rust_d3_geo:正在进行d3-geo的端口生锈。 期望Web应用程序的性能提高10倍

    阶段1 早期草稿端口-子模块一个子模块。 子模块移植意味着测试也已经移植。 没有API稳定性保证人。 我有src / distance.rs和src / length.rs的部分实现。 当前的部分移植测试表明,它们可以满足我需要的数据对象Data...

    金典WNPM 1.0

    录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设置,只需 鼠标一点即可完成。 1、注意事项:金典WNPM 1.0程序所在路径不能含有汉字和空格。 2、MySQL默认用户名:root,密码为...

    php、mysql、Apache三者集成的配置程序APMServ 5.2.6(1)(分两个压缩包)

    &4.0.26、Nginx 0.7.19、Memcached 1.2.4、phpMyAdmin 2.11.9.2、OpenSSL、SQLite、 ...虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设 置,只需鼠标一点即可完成。

    代替iis的最好的软件 IIS代替软件所有语言全面支持

    并拥有跟IIS一样便捷的图形管理界面,同时支持MySQL 5.0 & 4.0两个版本,虚拟主机、虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设置,只需鼠标一点即可完成。

    论文研究-SRAM型FPGA单粒子辐照试验系统技术研究.pdf

    为提高FPGA在辐射环境中的可靠性,深入研究抗辐射加固FPGA单粒子效应评估方法,设计优化单粒子效应评估方案,开发相应的评估系统,提出基于SRAM时序修正的码流存储比较技术和基于SelectMAP端口配置回读技术。...

    APMServ使用说明教程

    &4.0.26、Nginx 0.7.19、Memcached 1.2.4、phpMyAdmin 2.11.9.2、OpenSSL、SQLite、 ...虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设 置,只需鼠标一点即可完成。

    PMServ 5.2.6 下

    并拥有跟IIS一样便捷的图形管理界面,同时支持MySQL 5.0 & 4.0两个版本,虚拟主机、虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设置,只需鼠标一点即可完成。

    php、mysql、APMServ三者集成的配置程序APMServ 5.2.6(2)(分两个压缩包)

    &4.0.26、Nginx 0.7.19、Memcached 1.2.4、phpMyAdmin 2.11.9.2、OpenSSL、SQLite、 ...虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设 置,只需鼠标一点即可完成。

    APMServ使用说明.doc

    &4.0.26、Nginx 0.7.19、Memcached 1.2.4、phpMyAdmin 2.11.9.2、OpenSSL、SQLite、 ...虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设 置,只需鼠标一点即可完成。

    iCaMs 布线管理软件

    性能优化:  优化部分菜单显示顺序及逻辑;  规范并定义一批拓扑图编辑快捷键,提高操作效率;  增加CAD图纸的本地硬盘缓存;  增加CAD图纸的内存缓存:3张; iCaMs 3.0.4.0 升级日志(2011/4) 功能增加: ...

    APMServ5.2.6php集成环境

    &4.0.26、Nginx 0.7.19、Memcached 1.2.4、phpMyAdmin 2.11.9.2、OpenSSL、SQLite、 ...虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设 置,只需鼠标一点即可完成。

    APMServer5.2.6

    并拥有跟IIS一样便捷的图形管理界面,同时支持MySQL 5.0 & 4.0两个版本,虚拟主机、虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设置,只需鼠标一点即可完成。  1、注意...

    强烈推荐APMServ5.2.6

    并拥有跟IIS一样便捷的图形管理界面,同时支持MySQL 5.0 & 4.0两个版本,虚拟主机、虚拟目录、端口更改、SMTP、上传大小限制、自动全局变量、SSL证书制作、缓存性能优化等设置,只需鼠标一点即可完成。  1、注意...

Global site tag (gtag.js) - Google Analytics