【发布时间】:2017-08-24 06:03:53
【问题描述】:
我正在用 C++ 开发一个对延迟敏感的应用程序。有一个模块,我正在使用 boost::unordered_map。 在将第一个条目插入地图时,我遇到了太多延迟,之后所有条目都有不错的插入时间。
如果我使用 std::unordered_map 而不是 boost::unordered_map 这种行为不会发生。在这种情况下,第一次插入也需要几百纳秒(100~200)。
以下是我注意到的一些时间统计数据: - 地图中的第一次插入:大约 12 微秒(10 ~ 12 微秒) - 之后几乎所有的插入:200 纳秒(大约)
这里是示例代码:
struct timespec _timeSpec ;
long getTimerTime()
{
clock_gettime(CLOCK_REALTIME, &_timeSpec);
return ( 1000000000 * _timeSpec.tv_sec ) + _timeSpec.tv_nsec;
}
int main()
{
int i = 0;
boost::unordered_map < uint64_t , std::pair < uint64_t , bool > > _turnAroundTime ;
while( ++i != 10 )
{
uint64_t t1 = getTimerTime() ;
_turnAroundTime[i] = std::make_pair ( i, true );
uint64_t t2 = getTimerTime() ;
std::cout << "Latency : " << t2 - t1 << std::endl;
}
return 0 ;
}
【问题讨论】:
-
您有问题吗?
-
是否都插入到同一个存储桶中?
-
在创建地图之后使用地图之前调用'reserve(N)`方法。
-
@juanchopanza :是的,问题是,为什么会有这样的行为?如果我使用 std::unordered_map 则找不到此类行为。
-
@bhavuksamrat 您应该编辑 问题 以提及这一点。
标签: c++ c++11 boost hashmap low-latency