可能很多人会觉得,cas比lock高级。cas比lock性能更好。
但是其实,我个人觉得,这个看实际场景。
1、cas操作如果预料到会自旋很多次,然后会导致,做了事情之后(比如写了4、5行代码),再cas操作发现别人把这个数据改了,然后自旋,这就导致前面执行的4、5行代码都是无用功。
这样的化,性能就不是很好了。
2、比如AtomicInteger和lock Integer,再高并发下,AtomicInteger确实会性能好一点,但是也不会高特别多,那种几倍差距,除非,特别特别高的并发。
那是因为,AtomicInteger的自旋没有做其他的无用功,直接cas。
3、cas相对于lock的性能优化方面是,减少了thread切换的开销。
3、看Doug Lea大佬,直接使用Lock锁的场景比比皆是。
4、其实,更高的提高性能方式的方式,是想办法,把锁的粒度减少,比如像concurretHashmap一样。而不是盲目的用cas,我想这也是为什么Unsafe这个类设计的就是不让普通开发人员使用的一个原因。
总结:能不适用cas尽量不要用cas,lock不会比cas低很多性能,提高并发性能最大的地方应该是减少lock的粒度。
网友评论