今天,同事发现了一个系统瓶颈。我们发现在一个需要高速运行的线程中,总是出现缓慢的情况,引起了一系列的问题,这让我们觉得很头痛。今天,我的同事发现了这个问题,原因是在于每次在调用插入队列动作的时候调用了list::size()。可能对STL不是很敏感的人认为这可能并不是一个问题,但如果对STL比较熟悉的话,就会发现这个size调用是非常要命的事情。因为对于List来说,size意味着从头到尾遍历一遍队列计算长度,当队列长度越长,速度就越慢,这导致此处出现很大的问题。当这个容器改称deque之类的容器,问题就解决了,此类容器存在一个变量可以保存容器大小,因而避免了遍历的工作。
非常佩服这位同事,发现这个问题,真是非常厉害,不是一般人可以做到的。