在多个线程中独立运行Boehm GC
我正在试着写一些与Rust的Boehm GC 绑定 。
一些背景知识:Rust被devise成高并发语言,并且这种devise的结果是能够静态地限制GC指针到它们被分配的线程中(也就是说,在线程x中分配的GC指针可以永远不会被另一个线程保持活着(或者甚至被引用)。
因此,我希望推动Boehm尽可能地利用这个performance:
- 线程安全的,所以我可以从多个线程分配和收集
- 停止尽可能less的集合(即只是当前线程),其他线程可以继续运行,因为它们不可能干扰与自己之外的GC指针相关的任何事情
- 优选地,完全线程化地在不同线程的GC“实例”之间不同步
1很容易,但我找不到任何2和3的设施。最重要的部分是1和2,因为我希望能够在后台运行线程,而不pipe其他线程在做什么(即使他们都分配和垃圾收集千兆字节的内存)。
(我知道THREAD_LOCAL_ALLOC
& gc_thread_local.h
,但是这并不完全满足3,它只是使它更有效率,但它仍然是有效的线程间传递线程分配的指针,而我不需要那保证。)
我没有一个关于如何与Boehm做这个的答案。 但是,这里有两个似乎有足够的控制和封装GC,每个线程有一个完全独立的GC上下文。
- Lua的垃圾收集者 – 麻省理工学院
- 史蒂夫Dekorte的libgarbagecollector – BSD