先介绍一下流程:
1、初始化map,填充数据:map<string,vector<s_time_slice>> m_map_ts;//s_time_slice是简单结构
2、数据来了,首先通过m_map_ts判断数据是否是正确的,如果正确则加锁塞入缓存
if (data_check(sdd_copy))// 用到了m_map_ts(只读)!!
{
m_al_sdd.Lock(); // 互斥锁
m_vec_sdd_buf.push_back(sdd_copy);//vector缓存
m_al_sdd.UnLock();
}
3、处理线程不停的从m_vec_sdd_buf取数据,并且有很多处理。也用到了m_map_ts(只读),还用到了map<int,map<string,s_kline>> m_mapContainer;
m_mapContainer存放处理完的数据。
m_mapContainer是处理线程读写的,别的地方没有任何操作。
问题就是,我处理大量的数据时,一开始都是稳定运行的,但是大概10分钟之后,整个程序都慢下来了。加入日志,发现时间消耗在map的find上。我很奇怪,m_map_ts都是只读,没有加锁。而m_mapContainer只有处理线程一个操作他,也没有加锁。为什么还突然变慢了呢?
而且同样的程序,我本机是i3+8G内存会卡。但是放到服务器e5+32G内存就一点事没有。
如果有大神有空,我给下源码,帮着看一下。