MRI 1.9的Ruby GIL

MRI 1.9的Ruby GIL,ruby,multithreading,gil,Ruby,Multithreading,Gil,据我所知,MRI 1.9 GIL的工作原理如下: 解释器通过调用相应的底层C函数并请求获取“GIL”来生成一个新线程 如果“吉尔”是自由的,我们是幸福的。如果没有,新线程将等待并调用另一个单独的计时器线程来设置“时间片” 当当前执行线程到达一些边界(如返回或检查向后分支)时,解释器检查计时器以决定是否应该发生上下文切换 然而,正如本文所指出的,我们只能保证纯C实现的原子性。也就是说,如果线程的某些部分包含ruby代码,我们仍然处于竞争状态的危险中 我的问题是,如果线程在执行之前需要获取GIL,为

据我所知,MRI 1.9 GIL的工作原理如下:

  • 解释器通过调用相应的底层C函数并请求获取“GIL”来生成一个新线程
  • 如果“吉尔”是自由的,我们是幸福的。如果没有,新线程将等待并调用另一个单独的计时器线程来设置“时间片”
  • 当当前执行线程到达一些边界(如返回或检查向后分支)时,解释器检查计时器以决定是否应该发生上下文切换
  • 然而,正如本文所指出的,我们只能保证纯C实现的原子性。也就是说,如果线程的某些部分包含ruby代码,我们仍然处于竞争状态的危险中

    我的问题是,如果线程在执行之前需要获取GIL,为什么只有C实现方法才能保证原子性


    提前谢谢你

    GVL保证只有一个线程可以同时执行Ruby代码。当然,不同的Ruby线程可以在不同的时间执行Ruby代码


    此外,大多数Ruby实现都没有GVL。

    GVL保证只有一个线程可以同时执行Ruby代码。当然,不同的Ruby线程可以在不同的时间执行Ruby代码


    此外,大多数Ruby实现都没有GVL。

    我不确定我是否理解您的问题。GIL有帮助,但实际上仍然不能保证线程安全。您可以参考问题描述中的文章,其中指出了我提出的GIL问题。我不确定我是否理解您的问题。GIL有帮助,但实际上仍然不能保证线程安全。您可以参考问题描述中的文章,其中指出了我提出的GIL问题。