2

我的问题是关于 Parrot 虚拟机 ( http://www.parrot.org ) 中的垃圾收集器。

它是多线程的吗?

4

1 回答 1

4

Parrot 本身是多线程的,它甚至可以线性扩展至可用的物理 CPU 内核,并且它的 GC 正确支持多个线程,即对数据结构没有任何锁定(顺便说一句,与使用传统的 MoarVM 或 JVM 后端相比,这是一个主要优势锁定哈希、PMC 和数组),但 GC 本身并不在单独的线程中运行。GC 只在主线程中运行,是一个简单的 Mark&Sweep(即“停止世界”)三色分代 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/目录。

于 2014-09-05T15:27:14.963 回答