【发布时间】:2014-03-25 14:46:39
【问题描述】:
我的问题是关于 Parrot 虚拟机中的垃圾收集器 (http://www.parrot.org)。
是多线程的吗?
【问题讨论】:
我的问题是关于 Parrot 虚拟机中的垃圾收集器 (http://www.parrot.org)。
是多线程的吗?
【问题讨论】:
Parrot 本身是多线程的,它甚至可以线性扩展至可用的物理 CPU 内核,并且它的 GC 正确支持多个线程,即对数据结构没有任何锁定 (顺便说一句,这是 MoarVM 的主要优势或 JVM 后端在哈希、PMC 和数组上使用传统锁),但 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/ 目录。
【讨论】: