Go 提高大内存垃圾收集性能

Go 提高大内存垃圾收集性能,go,Go,我正在考虑在Go中实现一个内存缓存守护进程。它有可能获得一些严重的内存利用率(比如,TB)。分割成单独的堆不是一个好的选择,我希望它都在一个内存空间中。有没有人有使用如此大的内存运行Go的经验?GC的性能可以接受吗?我也在尝试这样做,但唯一能让我在缓存数据方面表现出色的项目是二叉树m,它在一台具有8GB内存的机器Ubuntu12.0.4LTS上支持超过一百万个节点。此外,它还可以快速加载和搜索数据 我测试的其他项目不支持内存上的许多节点,但没有一个项目能够像treap那样更快地从内存中恢复数据

我正在考虑在Go中实现一个内存缓存守护进程。它有可能获得一些严重的内存利用率(比如,TB)。分割成单独的堆不是一个好的选择,我希望它都在一个内存空间中。有没有人有使用如此大的内存运行Go的经验?GC的性能可以接受吗?

我也在尝试这样做,但唯一能让我在缓存数据方面表现出色的项目是二叉树m,它在一台具有8GB内存的机器Ubuntu12.0.4LTS上支持超过一百万个节点。此外,它还可以快速加载和搜索数据


我测试的其他项目不支持内存上的许多节点,但没有一个项目能够像treap那样更快地从内存中恢复数据

鉴于您列出的要求,我很想用非GCD语言编写这样的程序。好的缓存到期是很难的,不用担心GC;groupcache()可能正是您所需要的。@Evan我想到了groupcache;我很确定这不是我所需要的,因为我计划将相当多的处理逻辑放入我的“缓存”(如聚合)。问题是,我可以强迫自己使用的非GC语言并不多。在C++中这样做的想法使我害怕。如果它是一个万亿字节的块,那么你可以选择只使用MMAP来处理原始数据和垃圾收集,只为元数据。这就是groupcache的基本功能。如果您将有一个由16字节块组成的TB,那就不同了。@RussCox我考虑的是相对较大的块(比如说,10Mb块有数千个)。mmap听起来很有趣,但我在中没有看到任何关于mmap用法的引用?