我在go中使用了一个简单的光线跟踪器,到目前为止,它工作得很好。我使用多个goroutine来渲染图像的不同部分,然后将结果放入一个共享的胶片中。
与我的预期相反,我的go代码仍然比同等的java代码慢3倍。这是意料之中的吗?此外,在检查htop
中的CPU使用率时,我发现每个内核的使用率仅为85%左右。这是htop
的问题还是我的代码有问题?下面是我的应用程序的cpu profile
我确实将GOMAXPROCS设置为runtime.GOMAXPROCS(runtime.NumCPU())
。full code is on github。
发布于 2014-06-24 20:37:28
我猜垃圾收集器才是问题所在。也许你做了很多不必要的分配。通过使用runtime.ReadMemStats,您可以了解垃圾收集器已经运行了多长时间。
如果是这种情况,那么您必须找到一种方法来减少内存分配。例如,通过使用对象池。看看sync.Pool吧。此外,你也可以通过Google找到一些有用的链接来解释如何减少内存分配。以this one为例。
https://stackoverflow.com/questions/24390472
复制