我正在尝试为 Rust 编写一些与 Boehm GC 的绑定。
一些背景知识:Rust 被设计为一种高并发语言,这种设计的结果是能够将 GC 指针静态限制在分配它们的线程内(也就是说,在线程x中分配的 GC 指针可以永远不会被另一个线程保持活动状态(甚至根本不会被引用)。
因此,我希望推动 Boehm 尽可能地利用这一点来提高性能:
- 线程安全,所以我可以从多个线程分配和收集
- 尽可能少地停止集合(即仅当前线程),其他线程可以继续运行,因为它们不可能干扰与自身之外的 GC 指针相关的任何内容
- 最好是完全本地线程,不同线程的 GC“实例”之间没有同步
1 很简单,但我找不到 2 和 3 的任何设施。最重要的部分是 1 和 2,因为我希望能够让线程在后台运行,而与其他线程在做什么无关(即使它们都在分配和垃圾收集千兆字节的内存)。
(我确实知道THREAD_LOCAL_ALLOC
&gc_thread_local.h
,但这并不能完全满足 3 ,它只是提高了效率,但是在线程之间传输本地分配的指针仍然有效,而我不需要那个保证。)