zlog 1.0.6 发布,纯C日志函数库

来源: 投稿
作者: 难易
2012-06-15 00:00:00
再次感谢[nikuailema at gmail.com],找到了zlog的另一个瓶颈。
在我的开发环境下
-------------------------------------------------
v1.0.6
$ time ./test_press_zlog 1 10 100000
real    0m1.814s
user    0m3.060s
sys     0m0.270s

-------------------------------------------------
v1.0.5
$ time ./test_press_zlog 1 10 100000
real    0m2.779s
user    0m4.170s
sys     0m0.560s

 

可以看到速度提升了1倍不到点。
那么,在他的程序上,使用zlog 1.0.6 版本的提升速度是多少呢?  7倍!
那么,这是为什么呢?
localtime_r(&(a_thread->event->time_stamp.tv_sec),
    &(a_thread->event->local_time));

 

原本为每条日志调用一次 localtime_r,这个调用拖慢了整个的速度,于是代码改为
if (a_thread->event->time_stamp.tv_sec != a_thread->event->last_sec) {
  a_thread->event->last_sec = a_thread->event->time_stamp.tv_sec;
  localtime_r(&(a_thread->event->time_stamp.tv_sec),
    &(a_thread->event->local_time));
}

 

把上一次日志的秒数暂存,然后每次取完时间后比较现在的秒数是否等于原来的秒数,如果不等,才需要调用localtime_r,而实际上这个函数只需要每秒调用一次即可
所以这个简单的改动,大大降低了zlog对CPU的负担。我的测试程序是IO密集型的,CPU就只要负责IO即可,所以提升不明显。而他的程序是CPU密集性的,导致他的程序的性能提升7倍。
zlog是一个高可靠,高性能、线程安全、灵活、概念清晰的纯C日志函数库。
展开阅读全文
6 收藏
分享
3 评论
6 收藏
分享
返回顶部
顶部