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文档)

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

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

  • 相关阅读:
    脱发
    jquery radio 选择值
    今天看了非诚勿扰记忆哥,觉得人和人还是差的是能力
    如果要在数组中删除东西还是用倒序的数是正确的
    jquery操作 xml
    偶然在一个帖子上看到的
    jquery 队列的应用
    阅读
    Request的getParameter和getAttribute方法的区别
    jsp与jspx文件
  • 原文地址:https://www.cnblogs.com/cutepig/p/4783200.html
Copyright © 2011-2022 走看看