为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 与 Java 的速度

Golang 与 Java 的速度

湖上湖 2021-07-10 14:01:51
我用 Java 编写了一个程序,用 Go 编写了一个等效程序。我的 Java 程序执行时间约为 5.95 秒,而 Go 程序执行时间约为 41.675789791 秒。虽然 Go 的速度与 C 或 C++ 相当,因为它像 C 一样编译,但为什么会存在如此大的性能差异?程序如下:围棋程序package mainimport (    "math"    "fmt"    "time")func main() {    fmt.Printf("vvalue is %v", testFun(10, 16666611, 1000000000))}func fun(x float64) float64 {    return math.Pow(x, 2) - x}func testFun(first float64, second float64, times int) float64 {    var i = 0    var result float64 = 0    var dx float64    dx = (second - first) / float64(times)    for ; i < times; i++ {        result += fun(first + float64(i) * dx)    }    return result * dx}   Java程序public class Test {public static void main(String[] args) {    Test test = new Test();    double re = test.testFun(10, 16666611, 1000000000);    System.out.println(re);}private double testFun(double first, double second, long times) {    int i = 0;    double result = 0;    double dx = (second - first) / times;    for (; i < times; i++) {        result += fun(first + i * dx);    }    return result * dx;}private double fun(double v) {    return Math.pow(v, 2) - v;}}
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

我建议math.Pow(x,y)在 Go 中实际上没有x^yywhile 的整数值进行任何优化,而Math.pow(x,y)只是x*xfor y==2。至少在两个程序pow中用 simple替换时x*x,Java 为 6.5 秒,而 Go 为 1.4 秒。使用pow代替我仍然得到6.5秒为Java而29.4秒了围棋。


查看完整回答
反对 回复 2021-07-14
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

不要从其他语言翻译。用 Go 编写程序的 Go 版本。例如x*x - x,


package main


import (

    "fmt"

    "math"

    "time"

)


func main() {

    start := time.Now()

    v := testFun(10, 16666611, 1000000000)

    since := time.Since(start)

    fmt.Printf("value is %v\ntime is %v\n", v, since)

}


func fun(x float64) float64 {

    return x*x - x

}


func testFun(first float64, second float64, times int) float64 {

    sum := float64(0)

    dx := (second - first) / float64(times)

    for i := 0; i < times; i++ {

        sum += fun(first + float64(i)*dx)

    }

    return sum * dx

}

输出:


$ go version

go version devel +5c11480631 Fri Aug 10 20:02:31 2018 +0000 linux/amd64

$ go run speed.go

value is 1.543194272428967e+21

time is 1.011965238s

$

你得到什么结果?


查看完整回答
反对 回复 2021-07-14
  • 3 回答
  • 0 关注
  • 267 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信