由于线程调度导致异常缓慢?

时间:2016-03-31 21:49:13

标签: c++ linux solaris

我正在Solaris 11上运行多线程C ++应用程序。我想它也可能发生在Linux上,所以我添加了“Linux”标签。它是一个非常强大的盒子,但也运行许多应用程序。有时,我的应用程序处理来自线程池的线程处理的请求的速度非常慢。伪代码如下:

start = get_high_resolution_timer();
indexes = mymap.find(key);
for i in indexes:
    return_vector.push_back(cached_data[i]); // cached_data is vector<shared_ptr<Something> >
end = get_high_resolution_timer();

print (end-start)/1000000; // only care about milliseconds number

整个数据集cached_data向量并不大,并且大多数时候索引具有1个或少于10个索引。

通常打印为0,因为它不到1毫秒。偶尔会打印10s或100s毫秒。我想弄清楚为什么需要这么长时间。我认为,迭代整个数据集并复制所有内容不应该花费几毫秒。代码可能不是cpu缓存友好的,但它不应该有这么大的影响,我想。当前线程在“开始”和“结束”之间执行某些操作时,OS是否更有可能决定安排另一个线程? 谢谢, 德里克

0 个答案:

没有答案