到目前为止,我一直在玩一个简单的光线跟踪器。我使用多个goroutine渲染图像的不同部分,然后将结果放入共享电影中。
与我的期望相反,我的go代码仍然比同等的java代码慢大约3倍。这是预料之中的吗?此外,在htop
中检查CPU使用情况时,我发现每个核心仅用于大约85%。这是htop
的问题还是我的代码有问题?这是我的应用程序的cpu profile
我确实将GOMAXPROCS设置为runtime.GOMAXPROCS(runtime.NumCPU())
。 full code is on github。
答案 0 :(得分:0)
我猜想垃圾收集器就是问题所在。也许你正在做很多不必要的分配。通过使用runtime.ReadMemStats,您可以了解垃圾收集器运行的时间。
如果是这种情况,那么您必须找到减少内存分配的方法。例如,通过使用对象池。看看sync.Pool。此外,您可以通过Google找到几个有用的链接,解释如何减少内存分配。例如,请查看this one。