我的问题是关于Parrot虚拟机中的垃圾收集器(http://www.parrot.org)。
是多线程的吗?
答案 0 :(得分:4)
Parrot本身是多线程的,它甚至可以线性扩展到可用的物理CPU核心,它的GC正确支持多个线程,即没有任何数据结构锁定(这是BTW比MoarVM的主要优势)或者在哈希,PMC和数组上使用传统锁的JVM后端,但GC本身不会在单独的线程中运行。 GC只在主线程中运行,是一个简单的Mark& Sweep(即“stop the world”)三色世代GC。
此处描述了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/
目录。