【问题标题】:Is it possible to disable YARV's global interpreter lock?是否可以禁用 YARV 的全局解释器锁?
【发布时间】:2010-11-05 03:58:50
【问题描述】:

这比其他任何事情都更令人好奇(我应该完全放弃它并尝试 jRuby),但是是否可以禁用 YARV ruby​​ 的全局解释器锁和任何其他相关的锁?

我认为这会“使您的保修失效”,因为一些 YARV Ruby 的库不是线程安全的,但它会导致任何其他问题吗?

【问题讨论】:

    标签: ruby multithreading gil yarv


    【解决方案1】:

    除非您实际编辑源代码并重新编译,否则无法禁用它。我还没有看过它是如何实现的,但我猜很难将它从代码中“弹出”出来。如果你不想要 GIL,你可以试试 JRuby,我很确定 Rubinius 也没有。

    【讨论】:

    • 我的印象是 Rubinius 必须引入 GIL 以便 C 扩展始终有效。或者 GIL 仅在使用 C 扩展时才有效?也有可能我完全不正确。
    • C 扩展不需要 GIL(我认为)。 Brian Ford 在上次 PDXruby 会议上说,他们这样做的方式是在修改变量时添加一个小锁。所以如果一个线程正在修改@a,其他做同样事情的线程将不得不等待,而做其他事情的线程将继续正常运行。
    【解决方案2】:

    Tenderlove 有 tweeted 关于禁用 GIL 的补丁:

    我想看看@_ko1 的实验补丁来移除 GIL /cc @yukihiro_matz #rubyconf

    【讨论】:

      猜你喜欢
      • 2016-08-26
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多