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