Подтвердить что ты не робот

Запуск GC Boehm в нескольких потоках независимо

Я экспериментирую с написанием привязок к 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 полностью, это просто делает его более эффективным, но это все еще действительный для передачи указателей, выделенных потоком локально между потоками, в то время как мне не нужна эта гарантия.)

4b9b3361

Ответ 1

У меня нет ответа о том, как это сделать с Бёмом. Однако здесь есть два GC, которые, похоже, имеют достаточный контроль и инкапсуляцию, чтобы иметь полностью независимый контекст GC для каждой нити.