Node竟然比Go还快???
发布于 7 年前 作者 meiwhu 7422 次预览 最后一次回复是 7 年前 来自 分享
无聊测试下计算速度。
Node
let x = 0
console.time('label')
for (let i = 0; i < 10000000000; i++) {
x = i + i * i / 5
}
console.timeEnd('label')
执行结果:
PS D:\tests\tmp> node .\app.js label: 11681.500ms
Go
package main
import (
"fmt"
"time"
)
func main() {
x := 0
start := time.Now()
for i := 0; i < 10000000000; i++ {
x = i + i*i/5
}
end := time.Now()
fmt.Println(end.Sub(start))
fmt.Println(x)
}
PS D:\go\src\learn\playground> go run .\app.go 15.6571548s
黑人问号???
之前的循环不科学,这次来个科学点的
Node
let x = 1
console.time('label')
for (let i = 1; i < 1000000000; i++) {
x = i * i / x
}
console.timeEnd('label')
console.log(x)
PS D:\tests\tmp> node .\app.js label: 5113.117ms 636619773.1729867
Go
package main
import (
"fmt"
"time"
)
func main() {
var x float64 = 1
start := time.Now()
for i := 1; i < 1000000000; i++ {
x = float64(i*i) / x
}
end := time.Now()
fmt.Println(end.Sub(start))
fmt.Println(x)
}
PS D:\go\src\learn\playground> go run .\app.go 4.3488428s 6.366197731729867e+08
这下Go快一些了,不过也快的很有限,😄
16 回复
不止呢,比c语言还快,不信你试试,我这里c语言要23秒,node也是11秒
@zengming00 😂
@zengming00 别闹,编译型语言,这是连编译时间都算上了~ 你编译后再算一遍
我想起了贴吧一堆人争论0.999···到底等不等于1的故事。。。
c++ 用 -O 优化下编译这个循环会被优化掉几乎瞬间就结束了, js 快也是 turbofan 的运行时优化,其实这种很好预测的循环并不能代表更复杂的真实性能…
@hyj1991 这个有优化我是知道的,请问你这个代码怎么弄出来的呀😊
吓的我赶紧点进来看看
以很快的速度崩馈
0.9999是浮点数,1是整数,怎么可能相等,连再储存器上的排列方式都不同
@1316346949 呵呵
极端情况下,这种代码,编译器会把循环优化掉,只计算最后一次,因为代码的意思也就是只要取最后一次的值。
这种代码不能用来比较语言实际运行速度的,V8的jit的确很厉害,很多优化超过编译型语言了。
表示看不懂
跟编译优化有关
来自✨ Node.js开源项目精选✨
@hyj1991 @coordcn @vendar 我改了循环计算的内容,这样编译器会怎么优化呢?这次比较结果go并没有快很多
@hyj1991 优化代码是对应js的?
@meiwhu
jit做得变态的情况下,一些高频调用代码比编译型语言强都是正常的。luajit都能和C语言对刚了,更不要说go了。v8jit水平只会比luajit强,现在luajit不怎么维护了。