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

以前做过一次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计算密集型,每个线程只是执行一小段时间的多线程任务,非阻塞式的模式性能要占优势。

转载于:https://my.oschina.net/qinhui99/blog/60964

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值