SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue性能测试
2016-01-04 17:30
656 查看
SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue性能测试
JDK6对SynchronousQueue做了性能优化,避免对竞争资源加锁,所以想试试到底平时是选择SynchronousQueue还是其他BlockingQueue。
对于容器类在并发环境下的比较,一是是否线程安全,二是并发性能如何。BlockingQueue的实现都是线程安全的,所以只能比比它们的并发性能了。在 不同的应用场景中,对容器的使用情况不同,有的读取操作多修改写入操作少,有的修改写入操作多,这对容器的性能会造成不同的影响。但对于Queue的使 用,个人认为是比较一致的,简单点就是put和get,不会修改某个元素的内容再被读取,也很少只读取的操作,那是不是有最佳实践了?
LinkedBlockingQueue性能表现远超ArrayBlcokingQueue,不管线程 多少,不管Queue长短,LinkedBlockingQueue都胜过ArrayBlockingQueue。SynchronousQueue表现 很稳定,而且在20个线程之内不管Queue长短,SynchronousQueue性能表现是最好的,(其实SynchronousQueue跟 Queue长短没有关系),如果Queue的capability只能是1,那么毫无疑问选择SynchronousQueue,这也是设计 SynchronousQueue的目的吧。但大家也可以看到当超过1000个线程时,SynchronousQueue性能就直线下降了,只有最高峰的 一半左右,而且当Queue大于30时,LinkedBlockingQueue性能就超过SynchronousQueue。
结论:
线程多(>20),Queue长度长(>30),使用LinkedBlockingQueue
线程少 (<20) ,Queue长度短 (<30) , 使用SynchronousQueue
当然,使用SynchronousQueue的时候不要忘记应用的扩展,如果将来需要进行扩展还是选择LinkedBlockingQueue好,尽量把SynchronousQueue限制在特殊场景中使用。
少用ArrayBlcokingQueue,似乎没找到它的好处,高手给给建议吧!
最后看看测试代码和结果:(Win7 64bit + JDK7 + CPU4 + 4GB)
程序运行结果:
JDK6对SynchronousQueue做了性能优化,避免对竞争资源加锁,所以想试试到底平时是选择SynchronousQueue还是其他BlockingQueue。
对于容器类在并发环境下的比较,一是是否线程安全,二是并发性能如何。BlockingQueue的实现都是线程安全的,所以只能比比它们的并发性能了。在 不同的应用场景中,对容器的使用情况不同,有的读取操作多修改写入操作少,有的修改写入操作多,这对容器的性能会造成不同的影响。但对于Queue的使 用,个人认为是比较一致的,简单点就是put和get,不会修改某个元素的内容再被读取,也很少只读取的操作,那是不是有最佳实践了?
LinkedBlockingQueue性能表现远超ArrayBlcokingQueue,不管线程 多少,不管Queue长短,LinkedBlockingQueue都胜过ArrayBlockingQueue。SynchronousQueue表现 很稳定,而且在20个线程之内不管Queue长短,SynchronousQueue性能表现是最好的,(其实SynchronousQueue跟 Queue长短没有关系),如果Queue的capability只能是1,那么毫无疑问选择SynchronousQueue,这也是设计 SynchronousQueue的目的吧。但大家也可以看到当超过1000个线程时,SynchronousQueue性能就直线下降了,只有最高峰的 一半左右,而且当Queue大于30时,LinkedBlockingQueue性能就超过SynchronousQueue。
结论:
线程多(>20),Queue长度长(>30),使用LinkedBlockingQueue
线程少 (<20) ,Queue长度短 (<30) , 使用SynchronousQueue
当然,使用SynchronousQueue的时候不要忘记应用的扩展,如果将来需要进行扩展还是选择LinkedBlockingQueue好,尽量把SynchronousQueue限制在特殊场景中使用。
少用ArrayBlcokingQueue,似乎没找到它的好处,高手给给建议吧!
最后看看测试代码和结果:(Win7 64bit + JDK7 + CPU4 + 4GB)
相关文章推荐
- SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue性能测试
- 内部跳转(请求转发)request.getRequsetDispatcher()和外部跳转(重定向)response.sendRedirect()的区别
- google的guice入门详解
- 银联内核与pboc内核的区别(闪付流程)
- ArrayBlockingQueue和LinkedBlockingQueue的区别
- ArrayBlockingQueue和LinkedBlockingQueue的区别
- Leetcode213: Longest Consecutive Sequence
- Atitit.获取swing ui 按钮控件的id 与名字 与JPDA 调试体系
- Atitit.获取swing ui 按钮控件的id 与名字 与JPDA 调试体系
- Atitit.获取swing ui 按钮控件的id 与名字 与JPDA 调试体系
- java关键词,return,break,continue
- tornado学习笔记18 _RequestDispatcher 请求分发器
- 关于UIView的autoresizingMask属性
- 【解决方法】You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)
- J2msi 自己制作的把exe打成安装包简易GUI程序(第二版 带DLL注册)
- tornado 学习笔记15 _ServerRequestAdapter分析
- UGUI ScrollRect滚动优化:无限循环利用Item
- 如何創建 iOS 展開式 UITableView?
- UITextFiled输入框的使用(详细)
- (五)黑马程序员——Java中的字符串操作类(String、StringBuilder、StringBuffer)