再谈 高性能无锁(Lock-free) 内存池
来源:互联网 发布:主题壁纸软件下载 编辑:程序博客网 时间:2024/06/06 01:39
阅读前先看看:高性能无锁(Lock-free) 内存池
好吧,我承认当初加上 高性能 3个字只是用来吸引眼球的。这几天我一直在测试这个内存池和无锁堆,内存池的效率确实比 new 高得多,遗憾的是,我测试了使用锁 + std::stack 的方式,和无锁堆+无锁内存池的组合,我的测试是在循环里不断push和pop,会产生大量线程冲突。
开始时开了4线程密集测试,我很惊讶的发现,无锁组合比锁慢2~3倍!
使用 VS 2010 的性能分析功能分析后发现,大量的时间被消耗在 cas 操作上了。因此无锁算法并不一定就比锁快,是有条件的。
在我的双核机器上测试的结果,单个线程时无锁版本快50%左右,而从双线程开始,在线程数较低时,锁一直比较快,而线程数超过 16 左右后,情况开始反转,无锁版本慢慢占了上风。
然后,我企图测试低冲突下的性能,在循环里放入了 Sleep(0), 从双线程开始,双方的用时基本一致,然后无锁版本慢慢开始占优。但是到32线程为止,只有20% 左右的提高。
因此,在线程数不高的情况下,锁的效率其实并没有想象中那么低,由于锁的使用可以降低业务业务逻辑(像 std::stack 里使用的连续内存模型,应该就比我的队列内存池模型来的有效率,不过这只是猜想),还应该是 并行计算 里的主流。而在线程数较高的情况下,你就应该考虑无锁算法了!
PS: 无锁算法的另一个好处——不会死锁,应该会大大提高程序的稳定性。
- 再谈 高性能无锁(Lock-free) 内存池
- 高性能无锁(Lock-free) 内存池
- 高性能无锁(Lock-free) 内存池
- DIOCP开源项目-Delphi高性能无锁队列(lock-free)
- 无锁(lock-free)数据结构
- 无锁(lock-free)数据结构
- 无锁(lock-free) 数据结构
- 并发基础 -- 无锁(lock-free)数据结构
- 无锁数据结构lock-free 的 本质
- 无锁编程:lock-free原理
- 无锁编程:lock-free原理
- 无锁队列 lock free queue
- 无锁的 ( lock-free ) 线程安全算法
- 无锁(lock-free)队列的一个简单实现
- 多线程无锁(lock-free) 堆的实现
- 多线程无锁(lock-free)队列(queue)的实现探讨
- (转)无锁编程:Lock-Free Data Structures
- 无锁的 ( lock-free ) 线程安全算法
- 用jakarta poi操作excel文件
- MongoDB数据启动服务端和打开客户端 bat
- Oracle in与exist条件分析
- Eclipse不能正常启动,在启动的时候弹出 JVM terminated.Exit code=2
- 如何创建MeeGo Image
- 再谈 高性能无锁(Lock-free) 内存池
- Linux命令split
- D3D9中设备提交的实现细节 The Implementation Level Detail of IDirect3DDevice9::Present
- JAVA程序员面试32问,你能回答多少题?
- hibernate初用总结
- 如何查询SQL Server 数据库版本号
- SynchronizedMap和ConcurrentHashMap的深入分析
- 一个董事长给年轻人的金玉良言
- 转:Java 开源条码生成组件 Barcode4J