独立运行多个线程中的Boehm GC

时间:2014-01-04 14:06:33

标签: c multithreading garbage-collection rust boehm-gc

我正在尝试将一些bindings写入Boehm GC for Rust。

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

因此,我希望驾驶Boehm尽可能地利用它来获得性能:

  1. 线程安全,所以我可以从多个线程分配和收集
  2. 尽可能少地停止收集(即只是当前线程),其他线程可以继续运行,因为它们不可能干扰与自己之外的GC指针相关的任何内容。
  3. 优选地,完全线程本地,不同线程的GC“实例”之间没有同步
  4. 1很容易,但我找不到2和3的任何设施。最重要的部分是1& 2因为我希望能够在后台运行线程,而不管其他线程正在做什么(即使它们都是分配和垃圾收集千兆字节的内存)。

    (我做know about THREAD_LOCAL_ALLOC & gc_thread_local.h,但这并不完全满足3,它只是使它更有效,但它仍然有效传递线程之间本地线程分配的指针,而我不需要保证。)

1 个答案:

答案 0 :(得分:5)

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