Ruby 为什么 Java 没有 GIL?

linjunhalida · 2015年03月19日 · 最后由 est 回复于 2015年03月20日 · 3829 次阅读

python和ruby都有GIL,但是好像一些其他语言没有GIL,请问其他语言(比如java)如何处理这个问题的?是所有库都有lock保证资源安全吗?

共收到 8 条回复

不是 python, ruby 有 GIL ,而是 python 的最流行的解释器 cpython 和 ruby 的最流行的解释器 mri 都实施了 GIL .

解释器中实施 GIL 与否是个设计决定,选任何一个都要做出些妥协,具体可以搜搜看。

JVM 没有 GIL ,但是也有锁,只是锁的粒度细小得多,一般不会整个线程给你锁上。

楼主是想问 java 中 synchronized 这东西的么?

jvm的锁优化做的远胜ruby,python,种类多,偏向缩,可重入锁,7里面的并发库加入以cas(compare and swap)实现的解决锁开销问题也是一大亮点,也是为了适应多核环境,ruby python主流解释器无法完全开发多核性能。相应的,设计复杂度上就高出几个数量级。

主要是 Java 有金主,有人撑腰 👻

java是对象锁,而且java很少在运行期进行对象的修改,但ruby这种动态语言可以在运行期进行类的修改。

以我阅读《Seven Concurrency Models in Seven Weeks》第一章了解到的,Java 线程需要程序员处理的问题一样有,然后作者再三强调用锁很容易出错,推荐用其它并发/平行模型。

JRuby实现据说可以没有GIL

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册