zoukankan      html  css  js  c++  java
  • 基于TLS(线程局部存储)的高效timelog实现

    什么是timelog?

    我们在分析程序性能的时候,会加入的一些logging信息记录每一部分的时间信息

    timelog模块的功能就是提供统一的接口来允许添加和保存logging

    我们正在用的timelog有几个缺点

    1.固定大小,一旦满了就不能加入新的logging

    2.每次进入就会有一个全局的lock锁住,非常影响性能

    这两天基于boost的thread_specific_ptr和circular_buffer实现了一个高效的timelog,主要特点有

    1. 几乎不需要任何lock,所以性能理论上会非常高(虽然俺没真正测试过)

    2. 使用的是固定大小的环形队列,满了之后把会最老的信息抹去,所以不存在满了就不能加入logging的问题

    代码

    实现很简单

    有一点缺陷,懒得改了

    https://github.com/cutepig123/TestCpp/blob/master/cpp11test/1/mytimelog.cpp

     Known issues

    1) 所有timelog_create的timelog现在其实都指向同一个实现,所以无论create多少个其实东西都是一样的

    2)线程局部存储里的东西不会自动释放,所以会有内存泄露(除非你的每个线程都用boost thread,具体参考boost文档)

    如果程序的线程是固定的,那么没有什么影响

    但当程序不停地新建删除线程的时候就会有严重问题

  • 相关阅读:
    Java集合类框架的基本接口有哪些?
    JSR303校验 —— hibernate-validator实现
    JSON和对象或集合间的转换
    Servlet 单例、多线程
    session.invalidate()
    request获取各种路径
    动态加载类并实例化对象 —— newInstance
    js 事件冒泡和事件捕获
    js事件绑定
    css 选择器和优先级
  • 原文地址:https://www.cnblogs.com/cutepig/p/4783200.html
Copyright © 2011-2022 走看看