Есть ли у Parrot многопоточный параллельный сборщик мусора?
Мой вопрос о сборщике мусора в виртуальной машине Parrot ( http://www.parrot.org/).
Это многопоточный?
1 ответ
Сам Parrot является многопоточным, он даже линейно масштабируется до доступных физических ядер ЦП, и его GC правильно поддерживает несколько потоков, то есть без каких-либо блокировок структур данных (что, кстати, является основным преимуществом по сравнению с бэкэндами MoarVM или JVM, которые используют tradional блокирует хэши, PMC и массивы), но сам GC не работает в отдельных потоках. 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
Но обратите внимание, что попугай поддерживает только потоки (т.е. задачи), созданные из главного интерпретатора, а не из других задач (потоков), пул потоков предварительно инициализируется при запуске и управляется автоматически. Только владелец может записывать данные с помощью приоритетных запланированных задач-посредников. Технически вы можете создавать задачи из других задач, но это приведет к утечкам.
Для других потоков неатомарные данные видны через прокси-объекты только для чтения. Компилятор языка высокого уровня должен создать эти задачи для вас. Увидеть examples/threads/
каталог.