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技术原理 // ...
随机推荐
- (8). 使用JPA保存数据【从零开始学Spring Boot】
在看这一篇文档的话,需要先配置好JPA – Hibernate. 总体步骤: (1) 创建实体类Demo,如果已经存在,可以忽略. (2) 创建jpa repository类操作持久化. (3 ...
- 如何让 Windows 上的命令行工具更好用
侯爵老师视频详解:如何让 Windows 上的命令行工具更好用 很多 Windows 用户在打开这个小黑窗时,都会情不自禁的感慨,「实在是太丑了--」 实际上如果你用的是 Windows 8 或 Wi ...
- ExtJs之gridPanel的属性表格,编辑表格,表格分页,分组等技巧
这里藏的配置确实多.. 慢慢实践吧. <!DOCTYPE html> <html> <head> <title>ExtJs</title> ...
- windows XP下Python2.7包管理工具安装-setuptool,pip、distribute、nose、virtualenv
在Python开发中为了对项目进行管理和调试.必须安装一些特定的软件包.据说业内这个叫做yak shaving-做一个非常酷非常绚丽的Python项目之前,必须做的一些枯燥无味的准备工作.本文介绍了s ...
- JQuery常用的api[最好是系统地学习一下《锋利的JQuery》]
text http://api.jquery.com/text/ Get the combined text contents of each element in the set of matche ...
- Floyed理解
Floyed理解 Floyd算法的本质是动态规划,其转移方程为:f(k,i,j) = min( f(k-1,i,j), f(k-1,i,k)+f(k-1,k,j) ). f(k-1,i,j)表示经过前 ...
- 院校-国外-美国:斯坦福大学( Stanford)
ylbtech-院校-国外-美国:斯坦福大学( Stanford) 斯坦福大学(Stanford University),全名小利兰·斯坦福大学(Leland Stanford Junior Univ ...
- 18.29SSM基础整合开发
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/d ...
- day63-webservice 04.JaxWsServerFactoryBean和SOAP1.2
<wsdl:definitions xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap12="h ...
- 2.2.3 修改JSX代码
/** * Sample React Native App * https://github.com/facebook/react-native * @flow */ import React, { ...