码迷,mamicode.com
首页 > 编程语言 > 详细

基于TLS(线程局部存储)的高效timelog实现

时间:2015-09-05 14:57:57      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

什么是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文档)

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

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

 

基于TLS(线程局部存储)的高效timelog实现

标签:

原文地址:http://www.cnblogs.com/cutepig/p/4783200.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!