坑爹的stl
1) std::list::size() 是O(n)的
我會連接后端某個服務, 后端服務掛掉后, 我會堆積請求; 重連上之后會發送,使用std::list::size來進行不為空的判斷或者log輸出。
結果cpu 占了100%, 1秒發不了幾個包。
最后通過log定位到了std::list::size()可能有問題, 閱讀源碼,確定是這個原因。
后來網上也看到類似的:http://blog.csdn.net/russell_tao/article/details/8572000
另外,合作部門的同事說:
1) ?c++11的std::list::size是O(1) ? 我看源碼不是這樣哦? 仍然是O(n)
2) 使用deque做FIFO隊列。 侯捷的stl源碼剖析中說deque有性能問題,實現很復雜, FIFO使用deque也是非常浪費。
2) __gnu_cxx::hashmap::begin() 不是O(1)
begin成員函數是順序掃描hashmap的bucket, 找到第一個非空的bucket。
當hashmap的bucket比較大(100w級別), 同時元素較少時, 同樣非常吃cpu、且慢。
具體見 http://blog.csdn.net/aalbertini/article/details/38843673
總結
- 上一篇: 高并发时服务端配置
- 下一篇: tcp 的ack, seq