Есть ли в Parrot многопоточный параллельный сборщик мусора?

Мой вопрос касается сборщика мусора в виртуальной машине Parrot ( http://www.parrot.org ).

Он многопоточный?


person peterh    schedule 25.03.2014    source источник


Ответы (1)


Сам Parrot является многопоточным, он даже линейно масштабируется до доступных физических ядер ЦП, а его сборщик мусора правильно поддерживает несколько потоков, то есть без каких-либо блокировок структур данных (что, кстати, является большим преимуществом по сравнению с бэкэндами MoarVM или JVM). которые используют традиционные блокировки хэшей, PMC и массивов повсюду), но сам сборщик мусора не работает в отдельных потоках. GC работает только в главном потоке и представляет собой простой трехцветный генерационный GC Mark&Sweep (т. е. "остановить мир").

Обзор структуры потоков GC описан здесь: http://perl6advent.wordpress.com/2012/12/11/day-11-parrot-threads/ и подробно разработчиком здесь: http://niner.name/Hybrid_Threads_for_the_Parrot_VM.pdf

Но обратите внимание, что parrot поддерживает только потоки (т.е. задачи), создаваемые главным интерпретатором, а не другими задачами (потоками), пул потоков предварительно инициализируется при запуске и управляется автоматически. Только владелец может записывать данные с помощью назначенных по расписанию небольших задач записи прокси. Технически вы можете создавать задачи из других задач, но это приведет к утечкам.

Для других потоков неатомарные данные видны через прокси-объекты, доступные только для чтения. Компилятор языка высокого уровня должен создать для вас эти задачи записи. См. каталог examples/threads/.

person rurban    schedule 05.09.2014
comment
Теперь, когда получен правильный ответ, я удаляю свой неправильный ответ. Спасибо :) - person Sylwester; 05.09.2014