文档章节

JAVA和Go语言的多线程并发测试二

q
 qinhui99
发布于 2012/06/05 09:05
字数 742
阅读 3940
收藏 5

以前做过一次GoJava的多线程并发对比测试(JavaScalaGo语言多线程并发对比测试)。当时,测试所采用的例子是CPU运算密集型的,会占用大量的CPU资源。测试的结果Go并不占优势,可能的原因是,因为CPU资源稀少,Go采用阻塞模式的多线程工作效率比不上AKKA的无阻塞模式。也就是说,对于CPU运算密集型的情况,Go的多线程并发计算没有优势。可是,我以前做过读写文件和大循环的性能对比测试,发现Go都比Java要强,所以有理由相信在多线程并发的时候,Go不应该这么差的表现。为了验证Go的多线程优势,我又做了一次多线程并发对比测试.

 

测试内容:

IO密集型的多线程并发计算测试。这个测试里,CPU资源不再缺乏,IO操作比较频繁。并且由于IO操作比较慢,所以线程间的block时间可以相对多些,意味着可以开更多的线程来完成计算任务。

 

具体任务:首先,程序从一个本地文本文件里面读取相关的股票代码以及股票对应数量. 然后,再通过网络动态获取股票当前的价格,并汇总所有股票的总价值.

(从理论上讲,读取文件,循环遍历和快速启动多线程任务,都是Go的优势)

 

可控的因子:

1、网络响应时间。

由于网络访问很不稳定,为了做比较,使用Go写了个简单的httpserver, 模拟返回相关的股票价格,这样可以获得稳定的网络访问速度.

为了模拟较长的计算时间,采用让每次url访问休眠固定毫秒的方法。休眠时间越长,响应就越慢。 通过调节不同的休眠时间,来做不同的性能对比测试.

 

2、文本文件的股票行数。行数越多,处理计算量越大。

 

 

为了对比,我做了3种实现方案, 分别是: JAVA+AKKA2.0非阻塞模式

, JAVA+AKKA2.0阻塞模式, Go+goroutine

 

经过设置不同的网络响应时间和股票行数做了多组测试,测试结果和预期是吻合的。Go+goroutine是性能最好的。股票行数越多,网络响应时间越长,Go的优势就更明显。JAVA+AKKA2.0阻塞模式比JAVA+AKKA2.0非阻塞模式性能稍好些,这也验证了我早期做的一次测试:线程的阻塞模式好,还是非阻塞模式好呢? 对于这种非CPU计算密集型,每个线程只是执行一小段时间的多线程任务,非阻塞式的模式性能要占优势。

© 著作权归作者所有

q
粉丝 66
博文 73
码字总数 34091
作品 0
深圳
程序员
私信 提问
加载中

评论(4)

4
445720391@qq.com
请问go+goroutine优势很大么?差异有多大呢?可以找到测试结果么?对于上文的测试非阻塞式的模式性能要占优势吧?就是说:JAVA+AKKA2.0非阻塞模式比JAVA+AKKA2.0阻塞模式性能稍好些,是么?
花米
花米
JAVA+AKKA2.0阻塞模式比JAVA+AKKA2.0非阻塞模式性能稍好些?
q
qinhui99 博主
等有时间再看看它,目前主要精力在研究Go语言和AKKA。
老盖
老盖
谢谢分享,另外兄弟有兴趣测测JActor吗(http://www.oschina.net/p/jactor),看作者吹的挺牛X的

Java、Scala和Go语言多线程并发对比测试结果和结论

前面的内容请看:Java、Scala和Go语言多线程并发对比测试。 相关的代码下载:http://qinhui99.itpub.net/resource/2570/31876 测试结果和结论 统计1~N个自然数里面有多少个质数,并记录所花...

qinhui99
2012/05/25
13.7K
10
Clojure 语言的设计

via:AVOS Cloud Blog 基于 JVM 的决定 Clojure 能够吸引人的很重要一点是它是 JVM 之上的语言,这个决定非常关键。 首先,因为根植于 JVM 之上,并且做到了跟 Java 语言的相互调用,它能吸引...

都比zunxi
2014/08/21
586
0
Java 书籍 Top 10

陈皓 http:// blog.csdn.net/haoel 下面是Java Inside上推荐的十本Java书籍(文章来源),我把中文版的也列了出来。 1)Java Language Specification, Third Edition (by James Gosling) 本书...

JavaGG
2009/09/21
12.7K
20
你分得清分布式、高并发与多线程吗?

当提起这三个词的时候,是不是很多人都认为分布式=高并发=多线程? 当面试官问到高并发系统可以采用哪些手段来解决,或者被问到分布式系统如何解决一致性的问题,是不是一脸懵逼? 确实,在一...

宋庆离
01/17
2.2K
0
java多线程系列:通过对战游戏学习CyclicBarrier

CyclicBarrier是java.util.concurrent包下面的一个工具类,字面意思是可循环使用(Cyclic)的屏障(Barrier),通过它可以实现让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一...

huangzd
2018/01/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Git 分支管理规范

Git 仓库申请流程 开发主管向 Git 管理员提交 Git 仓库申请【邮件:发送给 Git 管理员,抄送给项目经理,申请表可向 Git 管理员获取】 Git 管理员审批开发主管的申请,审批以下具体信息: 审批...

物种起源-达尔文
12分钟前
3
0
浅谈iterator迭代器模式

一、前言 设计模式有很多,最典型的是GoF的23种设计模式,听起来很多,其实大部分我们都是见过的,按照常见度来分,最常用的差不多是六七个吧,因此,我们在学习的时候应该有轻重缓急之分,不...

青衣霓裳
13分钟前
3
0
Spring Boot2 系列教程(二)创建一个 Spring Boot 项目的三种方法

我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有再继续更新 Spring B...

江南一点雨
14分钟前
3
0
熟练掌握这5个Excel技巧,只加薪不加班

月初月报的整理,周一周报的整理都离不开Excel,有的同事只要10分钟搞定,也有同事花费一上午时间整理报表,这样对比起来,时间差是很大的。那怎样快速对Excel表中的数据进行整理呢? 1.快速...

干货趣分享
19分钟前
3
0
总结:SpringCloud

一、Eureka Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件 它主要包括两个组件:Eureka Server 和 Eureka Client Eureka Client:一个Java客户端,用于简化与 Eure...

浮躁的码农
28分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部