我正在尝试为Rust编写一些与Boehm GC相关的绑定。
一些背景:Rust被设计成一种高并发语言,其设计结果之一是具有将GC指针静态限制在它们分配所在的线程内的能力(也就是说,在线程x中分配的GC指针永远不能被其他线程保持活动状态(甚至根本不会被引用))。
因此,我希望尽可能地利用Boehm来提高性能:
- 线程安全,这样我就可以从多个线程分配和收集
- 最小化停机时间(即仅当前线程),其他线程可以继续运行,因为它们不可能干扰任何与GC指针外部相关的东西
- 最好是完全线程本地化,没有不同线程的GC“实例”之间的同步
1很容易,但我找不到2和3的任何设施。最重要的部分是1和2,因为我希望能够在后台运行线程,独立于其他线程所做的事情(即使它们都分配和垃圾回收吉字节的内存)。
(我确实知道THREAD_LOCAL_ALLOC
和gc_thread_local.h
,但它并不能完全满足3,它只是使其更有效,但仍然可以在线程之间转移本地线程分配的指针,而我不需要这个保证。)
-DPARALLEL_MARK
https://github.com/ivmai/bdwgc/blob/master/doc/scale.md 还有带时间限制的增量方式(以并行标记为代价)https://github.com/ivmai/bdwgc/commit/3c571c7ad66a90e33e4701afe3dc4d2113c60adc - rogerdpack