39

我正在尝试为 Rust 编写一些与 Boehm GC 的绑定。

一些背景知识:Rust 被设计为一种高并发语言,这种设计的结果是能够将 GC 指针静态限制在分配它们的线程内(也就是说,在线程x中分配的 GC 指针可以永远不会被另一个线程保持活动状态(甚至根本不会被引用)。

因此,我希望推动 Boehm 尽可能地利用这一点来提高性能:

  1. 线程安全,所以我可以从多个线程分配和收集
  2. 尽可能少地停止集合(即仅当前线程),其他线程可以继续运行,因为它们不可能干扰与自身之外的 GC 指针相关的任何内容
  3. 最好是完全本地线程,不同线程的 GC“实例”之间没有同步

1 很简单,但我找不到 2 和 3 的任何设施。最重要的部分是 1 和 2,因为我希望能够让线程在后台运行,而与其他线程在做什么无关(即使它们都在分配和垃圾收集千兆字节的内存)。

(我确实知道THREAD_LOCAL_ALLOC&gc_thread_local.h,但这并不能完全满足 3 ,它只是提高了效率,但是在线程之间传输本地分配的指针仍然有效,而我不需要那个保证。)

4

2 回答 2

8

我没有关于如何用 Boehm 做到这一点的答案。但是,这里有两个 GC,它们似乎具有足够的控制和封装,可以为每个线程拥有一个完全独立的 GC 上下文。

于 2014-10-28T22:20:47.320 回答
0

设施 3 似乎通过将收集器的每个全局变量声明为线程本地变量在 Boehm GC分支中实现 - https://github.com/Samsung/gcutil/commit/0cc277fb0cef82d515cc4ff4a439e50568474e16

于 2021-11-24T09:13:05.983 回答