我觉得可能的一个原因是: C/C++底层库对性能影响比较大。
最近在做的一个高性能KV数据库haisql_memcache,4核CPU下大约40万QPS,性能从最早的10多万QPS到现在的40万QPS,主体的代码变化不大, 主要是做了很多c/C++底层库,现在已经积累了超过1万行C/C++库,性能不断的提升。
前一阶段完成替换的库是:shared_ptr 和 unique_ptr, 自研库 性能比std库提升了一倍多。
已经替换了一批C/C++的标准库中过于陈旧的内容。如果新的模块上在算法方面没有创新,那么重写是毫无意义的, -O3优化下,同样算法的模块,性能几乎不会有变化。
目前该KV数据库已经比 memcache 快70%, 要知道我的网络层是层层封装的Boost:asio,内存是动态申请的(memcache的内存是预分配的),单核也比Redis单核性能更快。
我的代码中全部是C++的,大量使用std::string, std::vector等各种C++对象, 除库代码外,只有到5000行代码,性能超越C语言编写的,号称经典的memcache,确实是非常不容易,也说明了C++基础库对于性能和研发的重大影响。
也许有人会说 : C/C++库都是经典, 不不可超越的, 那么, 这里也是一个例子,即使是memcpy这样看上去无法优化的库代码,其实也是有办法优化的。怎样写出一个更快的 memset/memcpy ? - 知乎用户的回答 - 知乎 https://www.zhihu.com/question/35172305/answer/61584927
本帖最后由 yulihua49 于 2017-04-23 16:45 编辑
BetonArmEE 发表于 2017-04-21 00:26
发现一个奇怪的现象,相同一个程序源码,为什么在不同版本REDHAT不同BITS环境里编译后运行性能相差很大?
...
你的64位更慢?
两个可能。
1.硬件是32位,装64位系统是仿真的,比32位还慢。这个目前可能性不大。---你好像真是32位硬件哦!!!!
2.64位机进行32位运算更慢。 我对底层没有深入研究哎,但是,我想问一下:64位比32位内存优势大,但是速度一定快吗?为什么?总线访问速度快?还是因为什么,如果64位性能不比比32位快,那比如
说,64位的系统,指针、各种东西,都需要更多的处理,但是这个32位的虚拟机跑的是相同的硬件会不会有什么优势?比如一次总线能处理俩变量?
BetonArmEE 发表于 2017-04-23 20:33
回复 3# yulihua49
我家里是64位的硬件PC,装了32位的windows xp,装了vmware station,里面装64位的re ...
这个不好解释。但是我在几年前做过一个大数据量计算的系统测试,开始用的32位系统(软硬件都是32位的实体机),后来改用64位系统,软硬件都是64位,64位性能是3倍。
页:
[1]