我目前有一个处理工作包的大型集群(50 多台计算机)。所有这些工作包结果然后由控制器计算机收集。
因此,假设数据以半随机方式到达,并且逐渐增长:
0,2,3,8,7,1,4,9,10,11,6, ...
然后我必须按顺序将数据转储到文件中。而且由于工作包超过 100M,我在缓冲区中准备好下一个后立即转储它们。
我实际上使用的std::map
是这个“随机输入优先输出”,例如:
std::map<int, DataStruct> buffer;
long long next_work = 0;
while(next_work != 100000000){
fill_buffer(buffer); //This method fills the buffer from the processing elements
if(buffer.find(next_work) != buffer.end()){
dump_to_file(buffer[next_work]); // Dumps it to file
buffer.erase(next_work++);
}
};
这个缓冲区有时(由于网络延迟、PC 延迟、断开连接等)会增长到 100000+ 个元素,这会减慢操作速度。所以,我想知道 STL 是否有更好的类来处理这种类型的操作。
在这里使用std::map
合适吗?
有没有更好/ CPU 效率更高的方法?(我真的不在乎它是否有内存效率)