priority_deque作为Timer时间队列底层容器的一些思考
https://www.bbsmax.com/A/D854VkZxzE/
设置底层容器可以分离出两个逻辑上独立的问题:
>如何存储构成优先级队列(容器)的实际元素,以及
>如何组织这些元素以有效地实现优先级队列(priority_queue适配器类).
例如,当容量远大于其实际大小时,矢量的标准实现不需要自行缩小.这意味着如果您有一个由向量支持的优先级队列,如果您将许多元素排入队列然后将所有元素出列,则可能最终浪费内存,因为向量将保留其旧容量.另一方面,如果您实现自己的shrinking_vector类,它实际上在需要时会减少其容量,您可以获得priority_queue接口的所有好处,同时更有效地使用存储.
另一个可能的示例 – 您可能希望更改正在使用的分配器,以便从特殊资源池分配优先级队列的元素.您可以通过将priority_queue的容器类型设置为具有自定义分配器的向量来实现此目的.
还有一个想法 –
假设您正在存储一个非常大的对象的priority_queue,其复制时间非常长.在这种情况下,向量动态调整自身大小并复制其旧元素(或者至少在C03编译器中)的事实可能是您不愿意支付的.因此,您可以切换到其他类型,可能是deque,它在调整大小时不会复制元素,并且可以实现一些重大的性能获胜.
在高并发的http服务器下,定时器底层使用deque作为底层容器比vector要好的多,在C++reference上有介绍到deque容器的存储空间会根据需要被自动扩展或收缩。当并发量很大时,一方面deque不具有容量的概念,不会因为扩容产生vector的“重新配置,复制,释放”三个过程,并发量很大时,这三个过程时非常耗时的。另一方面,当并发量下来之后,之前高并发的内存会被合理释放合理收缩,vector是做不到的,除非实现自己的shrinking_vector类
priority_deque作为Timer时间队列底层容器的一些思考的更多相关文章
- 【曹工杂谈】Maven底层容器Plexus Container的前世今生,一代芳华终落幕
Maven底层容器Plexus Container的前世今生,一代芳华终落幕 前言 说实话,我非常地纠结,大家平时只是用Maven,对于内部的实现其实也不关心,我现在非要拉着大家给大家讲.这就有个问题 ...
- Java并发队列与容器
[前言:无论是大数据从业人员还是Java从业人员,掌握Java高并发和多线程是必备技能之一.本文主要阐述Java并发包下的阻塞队列和并发容器,其实研读过大数据相关技术如Spark.Storm等源码的, ...
- libev中timer时间事件监控器
1.数据结构 #define ev_at(w) ((WT)(w))->at#define ev_active(w) ((W)(w))->active typedef ev_watcher_ ...
- 『Python CoolBook:heapq』数据结构和算法_heapq堆队列算法&容器排序
一.heapq堆队列算法模块 本模块实现了堆队列算法,也叫作优先级队列算法.堆队列是一棵二叉树,并且拥有这样特点,它的父节点的值小于等于任何它的子节点的值. 本模块实际上实现了一系列操作容器的方法,使 ...
- 补番计划 (长沙理工大学第十一届程序设计竞赛)(双端队列+set容器+string)
补番计划 Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submissi ...
- STL学习系列七:优先级队列priority_queue容器
1.简介 最大值优先级队列.最小值优先级队列 优先级队列适配器 STL priority_queue 用来开发一些特殊的应用,请对stl的类库,多做扩展性学习 这里给个例子: #include< ...
- java使用顺序存储实现队列
详细连接 https://blog.csdn.net/ljxbbss/article/details/78135993 操作系统:当电脑卡的时候,如果不停点击,还是卡死,最后终于电脑又好了以后,操作 ...
- STL容器底层数据结构的实现
C++ STL 的实现: 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque ...
- 第19章 queue队列容器
/* 第19章 queue队列容器 19.1 queue技术原理 19.2 queue应用基础 19.3 本章小结 */ // 第19章 queue队列容器 // 19.1 queue技术原理 // ...
随机推荐
- EXPLAIN sql优化方法(1) 添加索引
添加索引优化器更高效率地执行语句 假设我们有两个数据表t1和t2,每个有1000行,包含的值从1到1000.下面的查询查找出两个表中值相同的数据行: mysql> SELECT t1.i1, t ...
- ExtJs之Ajax模式的表单数据加载
简单: <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-e ...
- owin--Authentication
下面的这个从httpcontext取出来的GetOwinContext的Authentication认证有很多关于cookie和session的方法,好像不实用owin也能取出来 private IA ...
- Thread interrupt表示什么
Thread interrupt表示什么 学习了:https://www.zhihu.com/question/41048032?sort=created 学习了:http://blog.csdn.n ...
- hdu1203--D - I NEED A OFFER!(转化01背包)
D - I NEED A OFFER! Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- 公布IOS产品被拒后怎样再上传新公布包
问题描写叙述: 前两天提交公司产品2.0.7版本号到苹果审核,昨天提示被拒绝. 被拒原因就不描写叙述了. 我们经过改动后.又一次打包上传,但是怎么也提交不了.由于在苹果后台上已经存在2.0.7版本号的 ...
- Spring技术内幕:SpringIOC原理学习总结
前一段时候我把Spring技术内幕的关于IOC原理一章看完,感觉代码太多,不好掌握,我特意又各方搜集了一些关于IOC原理的资料,特加深一下印象,以便真正掌握IOC的原理. IOC的思想是:Spring ...
- Adding Search
https://docs.asp.net/en/latest/tutorials/first-mvc-app/search.html In this section you’ll add search ...
- hdoj--3635--Dragon Balls(并查集记录深度)
Dragon Balls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- [xPlugin] smartupload jsp图片上传
URL:http://www.cnblogs.com/ISeeYouBlogs/p/jsp.html 1.要实现图片上传,首先需要一个组件,这里我用的是smartupload.jar可以到这里下载ht ...