![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 80
成怡
高性能流媒体服务器及手机端推流/播放app开发,提供整套移动直播核心技术产品,主页:http://anylooker.com,欢迎免费下载体验使用,源码大部分公开。
展开
-
高性能流媒体服务器-nebula之数据结构(1)--hash table介绍
高性能的hash table,该hash table的插入和删除效率是stl中unordered_map的2倍左右,查找的效率比unordered_map略高。考虑堆内存分配的性能问题,我们自定义了一个内存池以快速分配容器所需的内存,该hash表是自动扩展的。原创 2016-09-01 11:00:14 · 552 阅读 · 0 评论 -
高性能流媒体服务器-nebula之数据结构(3)--AVL树定时器
AVL树在nebula中的使用场景主要用于定时器的管理,对于线性增长的timestamp,经我们测试,AVL树比红黑数定时器在性能方面有一定的优势,尤其在WINDOWS平台表现得特别突出,所以我们采用AVL树作为nebula的定时器管理。原创 2016-09-01 11:38:32 · 397 阅读 · 0 评论 -
高性能流媒体服务器-nebula之数据结构(4)--动态数组NBAArray
NBAArray是一个不使用realloc分配内存的动态数组,当数组动态增长时,我们使用bucket指数级的分配内存,将动态数组的内存分配分散到各个bucket,避免了数组内存分配时的数据复制,使用场景:数据push很频繁的时候。经与stl中的vector比较测试,push时nbaarray比vector高出近5倍的性能,get时比vector慢3倍左右。在服务器系统中,有着非常均衡的稳定性。原创 2016-09-01 13:09:26 · 285 阅读 · 0 评论 -
高性能流媒体服务器-nebula之数据结构(5)--动态数组DynArray
DynArray是一个栈和堆并行分配内存的动态数组,当数组大小在初始化长度以内时,我们不用堆分配内存,当数组超出初始化大小时,我们用vector分配内存,这对于数据项较小但增长不频繁的场景有着非常高的效率。原创 2016-09-01 13:33:07 · 504 阅读 · 0 评论 -
高性能流媒体服务器-nebula之数据结构(6)--无节点内存分配的单、双链表
无内存分配的单链表和双链表的c++代码实现,由于不用内存分配给节点,效率很高,这stl中的list要高效得多,使用时要求每一个存储的节点包含一个Entry的实例,要存储节点必须在堆中分配内存。原创 2016-09-01 16:40:12 · 253 阅读 · 0 评论 -
高性能流媒体服务器-nebula之数据结构(2)--pairing heap
pairing heap在nebula studio中的使用场景主要用于HLS流和UDP流的限速发送,pairing heap用于timed queue的底层实现,在我们的pairing heap的中,实现了两种pairing heap,一个分配节点内存,一个不分配节点内存,据测试,比STL中的优先队列性能高出近1倍,下面是具体实现:原创 2016-09-01 11:26:23 · 724 阅读 · 0 评论 -
高性能流媒体服务器-nebula之数据结构(7)--环形无锁队列
STRingQueue是一个单线程访问的环状队列;SPSCRingQueue是一个wait-free,单生产者--单消费者的无锁环形队列,当入队的元素超过限定的元素个数时,返回false,效率非常高.使用方法:peek--获取队列头元素,peekDone--头元素出队,该队列的使用场景:每个client session的发送队列,如果发送队列溢出,则表示用户网速太慢,服务器应主动断开用户的连接。原创 2016-09-02 11:06:26 · 607 阅读 · 0 评论 -
高性能流媒体服务器-nebula之数据结构(8)--双链表实现的内存中立队列
这一个由双链表实现的内存中立的队列,进队的新节点next指针指向head节点,head节点的prev指针指向入队最后节点。与stl中的queue比较,由于不分节点内存,所以非常高效,使用时要求每一个存储的节点包含一个Entry的实例,要存储节点必须在堆中分配内存。原创 2016-09-02 12:09:43 · 327 阅读 · 0 评论 -
高性能流媒体服务器-nebula之数据结构(9)--双锁并发队列
这是根据 Maged M. Michael and Michael L. Scott提出的双锁并发队列算法实现的c++版本,主要应用场景为:单生产者/多消费者或多生产者/多消费者或多生产者/单消费者的情况,在实现中,我们用spinlock作为互斥锁;内存分配采用了无锁内存池进行分配。原创 2016-09-02 14:28:46 · 404 阅读 · 0 评论