Я экспериментирую с написанием привязок к GC Boehm для ржавчины.
Некоторая предыстория: Rust разработан как высококонкурентный язык, и результат этого проекта имеет возможность статически ограничивать указатели GC в пределах потоков, в которых они были выделены (то есть указателя GC, выделенного в нить x никогда не может быть сохранена (или даже вообще указана) другим потоком).
Следовательно, я хочу заставить Boehm максимально использовать это для производительности:
- поточно-безопасный, поэтому я могу выделить и собрать из нескольких потоков
- коллекции stop-as-little-as-possible (т.е. только текущий поток), другие потоки могут продолжать работать, потому что они не могут помешать чему-либо, относящемуся к указателям GC вне себя
- предпочтительно, полностью thread-local без синхронизации между "экземплярами" GC разных потоков
1 легко, но я не могу найти никаких средств для 2 и 3. Самая важная часть - 1 и 2, потому что я хочу иметь потоки, работающие в фоновом режиме, независимо от того, что делают другие потоки (даже если они все выделяют и собирают мусор гигабайт памяти).
( знаю о THREAD_LOCAL_ALLOC
и gc_thread_local.h
, но это не совсем удовлетворяет 3 полностью, это просто делает его более эффективным, но это все еще действительный для передачи указателей, выделенных потоком локально между потоками, в то время как мне не нужна эта гарантия.)