【问题标题】:Does Parrot have a multi-threaded parallel garbage collector?Parrot 有多线程并行垃圾收集器吗?
【发布时间】:2014-03-25 14:46:39
【问题描述】:

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

是多线程的吗?

【问题讨论】:

    标签: raku parrot rakudo


    【解决方案1】:

    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/ 目录。

    【讨论】:

    • 现在正确答案已经到来,我删除了我的错误答案。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2019-11-08
    相关资源
    最近更新 更多