首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MRI 1.9的Ruby

MRI 1.9的Ruby
EN

Stack Overflow用户
提问于 2015-10-03 08:01:04
回答 1查看 116关注 0票数 1

以我的理解,以下是MRI 1.9 GIL的工作原理:

  1. 解释器调用相应的底层C函数并请求获取"GIL“,从而生成一个新线程。
  2. 如果“吉尔”是自由的,我们是快乐的。否则,新线程将等待并调用另一个单独的计时器线程来设置"timeslice“。
  3. 当当前执行的线程碰到某些边界时,例如返回或检查向后分支,解释器将检查计时器以确定是否应该发生上下文切换。

然而,正如这个文章所指出的,我们只能保证纯C实现的原子性。尽管如此,如果线程的某些部分包含红宝石代码,我们仍然处于种族状态的危险之中。

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

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2015-10-03 17:51:01

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32920289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档