在开发对外提供服务的模块的时候,系统的性能经常会是令我们头疼的问题,具体系统性能的定义与瓶颈的定位方法,可以参考陈皓的这篇文章:
性能调优攻略http://coolshell.cn/articles/7490.html 大牛的这篇文章还是很全面的。
下面我会以我们的一些工程经验和曾经遇到过的问题,来实例化一些系统性能调优的经验。
Ø 代码级别
1. 减少数据copy
1)使用指针,代替静态数据copy
以下面的数据结构为例:
struct goods_info_for_rank_t
{
good_info_ptrp_goods_info;//静态数据,只可读不可写!!!
….//省略若干
//策略相关的字段
float doc_weight;
float goods_weight;
};
以前这个goods_info_for_rank_t 进行内容赋值的时候要从p_goods_info 拷贝全部的数据到goods_info_for_rank结构,其实很多静态数据只是可读的并且数据量很大,当时优化的一个思路是去掉这个结构体,只使用good_info_ptr这个结构,但是忽略了这个结构体是静态只读,并且多线程并发使用的,从而使得多线程情况下出现core dump(修改后需要写,导致多线程同时写一份good_info_ptr数据