zoukankan      html  css  js  c++  java
  • 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类

  • 相关阅读:
    由"跨域"引出的一个终极思想(jsonp)
    SQLAlchemy 使用教程
    rbac-基于角色的权限控制系统(8种常用场景再现)
    Django中间件 (middleware)
    tcp粘包问题原因及解决办法
    细说【json&pickle】dumps,loads,dump,load的区别
    python面向对象--快速入门
    python三大器(装饰器/生成器/迭代器)
    django神器 <自定义过滤器filter 和 标签tag>
    python 基础数据类型汇总
  • 原文地址:https://www.cnblogs.com/AKUN-FYK/p/10982214.html
Copyright © 2011-2022 走看看