前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >采用epoll模型服务器连接管理器实现

采用epoll模型服务器连接管理器实现

作者头像
王亚昌
发布2018-08-03 15:32:15
8450
发布2018-08-03 15:32:15
举报
文章被收录于专栏:王亚昌的专栏

【应用场景】

    在网络服务器中,需要维护所有连接信息,通常是以fd做为key,连接信息结构体做为value。每次有新连接接入时,需求加入一个映射关系;每次有新数据到达时,需要根据对应的fd查询到对应的连接信息结构。

    通过上面的场景我们可以抽象出来一类数据,数据的特点如下:

  • 数据有多条,支持增、删、改
  • 数据结构有唯一的索引,且索引号动态分配
  • 需要很方便的根据key查询到value(这里是性能的关键)
  • 记录数有上限(不是必要的,但通常都需要,比较TCP连接就需要)

【解决方案】   

    一种解决方案是,把信息保存在map或hash_map中,可以根据key方便的增、删、查对应的结构。不过,这两种存储方式都有一点的缺点,map查询的时间复杂度是o(logn),hash_map查询的时间复杂度是o(1),但是会分配一定的冗余空间。同时这两种方式都需要单独维护一个记录数上限。下面讨论一种基于下标查询的优化方案。

【方案优化】

    就查询效率而言,数组下标索引的时间复杂度是最低的o(1),因此我们可以考虑把所有的记录都使用下标进行索引,但因为key是动态分配的,比如TCP连接的fd就是系统分配的,因此fd是不适合做下标的,所以我们可以把下标信息保存在key信息中。每次获得key信息后,从 key信息中解出下标,然后直接通过下标进行索引。   这种方案对应用场景又加了一条限制,就是“每次获取到的key信息有冗余字段可以保存下标”,因为这个方案是从epoll服务模型中抽象出来的,更多的应用场景有待发据掘。

【代码示例】

    下面以基于epoll模型的服务器中连接管理为例介绍优化方案的实现。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010年06月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档