just do it.
我自己的经验是: 技术一定要固化成某种方便调用的库,才算是真正掌握了。否则,时间一长,就会遗忘,成为遗失的技术。
知道一种c/c++技术可能比现有的 流行技术更优,弄懂主要思路后,就赶紧去实现一遍,保存在 c/c++ 库里,实现的时候从底层数据/代码流的角度,或者说从cpu硬件的角度,去分析可能的瓶颈,然后不断的修改源码,反复的测试,最终都会有非常好的性能,原因在于长期积累的经验,反复优化,哪天又想到一个优化的思路,就赶紧固化为代码立即测试,积累久了,就有很多开箱即用的高性能的库代码。
时间长了,c/c++库里面一堆的黑科技,随便拿出来几个都很厉害,例如: 最底层替换一些时钟周期比较大的基础硬件运算,例如整数除法有比 Intel九代之前的cpu硬件除法指令快5倍的软件算法,64bit 移位(类似1 << N之类),有比Intel cpu硬件移位快3倍的软件算法。
c++软件算法,一堆比std库更快的class, 包括常用的vector, string, deque, unordered-map/set 等等,一些函数有数倍的性能提升。写应用层或者高层代码,同样的算法,一些场合下,性能也会更好。
一些比较前沿的c++技术都有实现,包括更高并发的 wait-free 队列, 包括多生产者和多消费者队列等,比传统lock free算法快N倍;更快并且完全线程安全的下一代智能指针(功能和接口类似于shared ptr,安全性好太多了,多处使用了RCU技术);更安全的可重入的mutex锁;比传统thread local ptr的实现快N倍的thread local...一大堆好用可靠的高并发的组件,都是按照多线程防御编程模式加固过的,是完全线程安全的,代码复杂度非常高,考虑的极端场景很多,动辄数千行源码,不仅比多数库的实现更快,而且更稳定。写多线程应用代码时,使用库调用标准接口,更容易写出又快又稳定的代码,普通程序员操心的事情也少了很多,统一多线程的使用方法,集中解决多线程问题,实现更高的性能。
总之,就是要动手去做,只有脏了自己的手,才能有更深的领悟,只有最终把技术转化为可随时调用的库,并且在实践中灵活运用,才算是真正掌握了。知易行难,动手去做吧。
作者:郭忠明