Ruby 是否可以禁用YARV';s全局解释器锁?

Ruby 是否可以禁用YARV';s全局解释器锁?,ruby,multithreading,gil,yarv,Ruby,Multithreading,Gil,Yarv,这比其他任何东西都更令人好奇(我应该完全放弃这一点,试试jRuby),但是有可能禁用YarvRuby的全局解释器锁和任何其他相关锁吗 我假设这将“使您的保修失效”,因为YARV Ruby的一些库不是线程安全的,但它会导致任何其他问题吗?除非您实际编辑源代码并重新编译,否则无法禁用它。我还没有看到它是如何实现的,但我猜很难从代码中“弹出”它。如果你不想要GIL,你可以试试JRuby,我敢肯定Rubinius也没有。除非你真的编辑源代码并重新编译,否则没有办法禁用它。我还没有看到它是如何实现的,但我

这比其他任何东西都更令人好奇(我应该完全放弃这一点,试试jRuby),但是有可能禁用YarvRuby的全局解释器锁和任何其他相关锁吗


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

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

Tenderlove提供了一个禁用GIL的补丁:

我想看看"u ko1"的实验补丁,移除GIL/cc @卢比孔夫

Tenderlove提供了一个禁用GIL的补丁:

我想看看"u ko1"的实验补丁,移除GIL/cc @卢比孔夫


我的印象是Rubinius必须引入GIL,这样C扩展才能一直工作。或者GIL只有在使用C扩展时才有效?也有可能我完全错了。我认为C扩展不需要GIL。Brian Ford在上次PDXruby会议上说,他们这样做的方式是在修改变量上添加一个小锁。因此,如果一个线程正在修改@a,那么其他线程也将不得不等待,而其他线程将继续正常运行。我的印象是Rubinius必须引入GIL,以便C扩展能够始终工作。或者GIL只有在使用C扩展时才有效?也有可能我完全错了。我认为C扩展不需要GIL。Brian Ford在上次PDXruby会议上说,他们这样做的方式是在修改变量上添加一个小锁。因此,如果一个线程正在修改@a,那么其他执行相同操作的线程将不得不等待,而执行其他操作的线程将保持正常运行。