为什么 Golang for 循环比 Python for 循环慢?

Why Golang for loop is slower than Python for loop?

我测试了golang在for循环上的表现

只是在 python 和 golang 中循环了 50,000 次,我发现在 python 中花费了 0.59 秒,而在 golang 中花费了 9.12 秒

有经验的 Go 开发者能告诉我为什么 Golang 作为一种编译型语言在 for 循环上太慢吗?


import (
    "fmt"
    "time"
)
func main()  {
    start := time.Now()

    for i := 0; i < 50000; i++ {
         fmt.Println("Index", i)
    }

    finish := time.Now().Sub(start).Seconds()
    fmt.Printf("Elapsed time was %.2f seconds.\n", finish)
}

您没有衡量您认为正在衡量的内容,这就是您获得 "surprising" 结果的原因。

您正在计算格式化和打印字符串所需的时间,而不是 "how fast a for loop is"。

此外,请记住,衡量打印某物所需的时间不仅取决于代码的编译/解释方式,还取决于您打印的确切位置:I/O 性能取决于事物超出您的程序范围(可能是 OS,可能是某些物理设备等)。

最后,如果您尝试对完全不执行任何操作的循环的性能进行微基准测试,编译器可以检测到这一点并简单地完全优化循环,让您无法测量任何东西...

在大多数情况下,这些孤立的微基准测试没有用。如果你想在性能方面比较 Python 与 Go,测试一个真正的问题通常比人为的问题更好。然后不仅比较原始性能,还比较一般代码质量的其他特征。

归根结底,这个基准测试有太多错误,无法得出任何有用的结论。