1. 既然比较两者性能, 必然锁的区域极小, 可以使用原子操作代替

2. 若这个极小区域就是操作的全部, 只是频繁被调用, 则看并发的线程数量, 在并发量小时,  线程冲突小, 而一个 yield 可以保证较长时间内其他线程不来打搅, 获得的是一个类似批处理的结果, 性能较原子操作高; 自然, 若仅仅只有一个线程, 大家都是批处理, 还是原子操作性能高些; 随着线程数增加, 线程冲突频繁, 此时基本上无视线程多少的原子操作开始超越 yield 锁; 若是 futex 锁, 似乎比 yield 锁可以取得更高性能;但  futex 太重, 估计要超过 yield 锁需要的线程数是个不太现实的数字;

3, 若这个极小区域是一个较长调用的一部分, 则锁区域比重降低, 意味着同时访问临界区的概率降低, 此时锁自身的成本成为性能主要影响因素, 原子操作性能会超过yield锁,  但由于锁区域比重低, 因此整体性能并不会表现出很大差异

 

唯一貌似原子操作比 yield 锁性能大很多的就是 情况 2 的极大并发下 及 锁区域很大下, 但很大的锁区域恐怕原子操作不能够做等价实现, 因此没有意义

结论就是整体而言, 原子操作性能要高些, 但有限

posted on 2014-05-19 00:42  zylthinking  阅读(4706)  评论(1编辑  收藏  举报