- 论坛徽章:
- 11
|
codechurch 发表于 2014-11-25 09:58
对主贴而言,能写出这个相当不简单,我没有仔细看,但,我提出一个问题,希望楼主注意一下:
对于没 ...
我认为是没有 bug 的, 只不过使用场景并不是很大; 之所以使用所谓特殊的堆, 只不过是测试的时候省心而已
曾经尝试用于正式代码, 每次加入后很快就剔除了, 因为发现根本用不到他提供的那点语意;
多白了, 这玩意最适用场景在于多写一读, 而且得是成千上百线程才能看出效果; 曾经测试了这个东西与其他几种锁实现的性能对比, 结论如下:
http://www.cnblogs.com/zylthinking/p/3736032.html- 原子操作与锁
- 1. 既然比较两者性能, 必然锁的区域极小, 可以使用原子操作代替
- 2. 若这个极小区域就是操作的全部, 只是频繁被调用, 则看并发的线程数量, 在并发量小时, 线程冲突小, 而一个 yield 可以保证较长时间内其他线程不来打搅, 获得的是一个类似批处理的结果, 性能较原子操作高; 自然, 若仅仅只有一个线程, 大家都是批处理, 还是原子操作性能高些; 随着线程数增加, 线程冲突频繁, 此时基本上无视线程多少的原子操作开始超越 yield 锁; 若是 futex 锁, 似乎比 yield 锁可以取得更高性能;但 futex 太重, 估计要超过 yield 锁需要的线程数是个不太现实的数字;
- 3, 若这个极小区域是一个较长调用的一部分, 则锁区域比重降低, 意味着同时访问临界区的概率降低, 此时锁自身的成本成为性能主要影响因素, 原子操作性能会超过yield锁, 但由于锁区域比重低, 因此整体性能并不会表现出很大差异
-
- 唯一貌似原子操作比 yield 锁性能大很多的就是 情况 2 的极大并发下 及 锁区域很大下, 但很大的锁区域恐怕原子操作不能够做等价实现, 因此没有意义
- 结论就是整体而言, 原子操作性能要高些, 但有限
复制代码 |
|