lock free到底能不能提高性能

不知道lock free的可以看我前一篇文章。lock free这个东西还真是一路波折,争议不断。最近连续看到有不少大牛(比如1,2)都曾经或正在讨论这个问题。

lock free对于dead/live lock问题的解决这点应该是没什么可争议的,这也确实是lock free最大的好处。

讨论得比较多的还是集中在算法的性能上,毕竟多核时代multiprogramming主要还是要解决程序性能瓶颈的问题。虽然我个人并不是太关心lock或者lock free对性能的影响,但大家对性能的追求总是无止境的……

映像中以前有些文章测试过lock free带来的性能上的改善,好象是某些情况下可以多达4倍左右,当然这个数字本身没什么意义。众所周知,performance的问题受太多的因素影响,多核就更复杂了,总而言之是软硬件共同作用的结果。不过如果真的是在某些测试下速度可以提高好几倍,这个应该是相当可观的了。

不过很多讨论(还是这个)都认为lock free里面用到的那些CPU的原子指令最终还是需要用到lock一样的机制来实现,所以和直接用lock的算法相比性能基本上不应该有提高。这个观点我是不太赞成的,从概念上讲像CMPXCHG这样的指令当然可以理解成内部用了一把锁,实际上处理器用的应该是锁总线的方法。我们通常讲的真正的lock,这个是操作系统层的概念,至于内部是如何实现的不是很清楚,不过可以肯定的是对锁的各种操作(检查、获取、释放)相对一条简单的原子指令来说都是非常重量级的。毕竟锁要面对的问题也要比一条原子指令复杂得多。所以,用原子指令替换系统lock的方案应该还是会有一些性能提升的。至于提升多少,这个得看具体case了,不过应该不只是那种可以忽略的提高。原子指令相对OS上的锁来说正是利用了硬件对并发的专门支持,毕竟特化的东西通常情况下总是比通用的方案更适合一些(否则也就不需要特化了)。搞过某些特定应用(比如视频处理)的人都知道,一般都是先用软件来模拟实现和验证某个逻辑,但是到最后可能还是要靠一些专用的电路来提速,其实道理有点类似。

你可能感兴趣的:(lock free到底能不能提高性能)