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技术原理 // ...
随机推荐
- display显示属性理解
display属性设置一个元素应如何显示,是我们在前端开发中常常使用的一个属性,其中,最常见的有: 目录 display:none;表示此元素将不被显示. display:block;将元素显示为块元 ...
- elasticsearch 权威指南聚合阅读笔记(七)
count(1) select clssId,count(1) from student group by classId { "size":0, "aggs" ...
- 数位dp无前导零
题目链接:http:// www.lydsy.com/JudgeOnline/problem.php?id=1026 #include <iostream> #include < ...
- Java 学习(8):java 方法
Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 命名规则: 1. 必须以 字母.'_'或'$'开头. ...
- js 跨浏览器获取事件信息模块
var EventUtil = { addHandler: function(element, type, handler) { if (element.addEventListener) { ele ...
- Android之——自己主动挂断电话的实现
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47072451 通过<Android之--AIDL小结>与<And ...
- Hook的两个小插曲
看完了前面三篇文章后,这里我们来一个小插曲~~~~ 第一个小插曲.是前面文章一个CM精灵的分析.我们这里使用hook代码来搞定. 第二个小插曲,是如今一些游戏,都有了支付上限,比如每天仅仅能花20块钱 ...
- 自己主动化的在程序中显示SVN版本号
有时候会有这种情况,策划拿着应用过来提一个bug,但我们却不好确定策划的手机上装的应用相应的是那个代码版本号. 为了解决问题.我们希望能在应用上显示出当前应用所相应的代码版本号,即svn版本号. 构想 ...
- vue组件的3种书写形式
第一种使用script标签 <!DOCTYPE html> <html> <body> <div id="app"> <my- ...
- Php learn note
Php learn note 1. Between two part of ECHO, there is , sign rather than + sign. echo 'Hello World!!' ...