写点什么

MacRuby 放弃 GIL,实现并发线程

  • 2009-07-04
  • 本文字数:1071 字

    阅读完需:约 4 分钟

Ruby 的线程总是一个很烦人的东西。Ruby 1.8 实现了具有用户空间的线程,但是存在一些性能问题,而且也和多核系统不兼容。

Ruby 1.9将每一个 Ruby 线程映射到内核线程,改善了 1.8 线程的性能

这就是全局解释锁(GIL),有时候也叫做全局 VM 锁(GVL)。每一个 Ruby 线程需要在运行之前请求 GIL。Ruby 的这个实现细节和 Python 类似(在最近数年里面这个问题可以被分解实现)

在过去几年内,Ruby 实现的替代品已经去掉了 GIL:JRuby 和 IronRuby 都没有 GIL。

现在 MacRuby 也紧随其后,能够在没有 GIL 的情况下工作,Laurent Sansonetti 这样解释说

所有的 MacRuby 线程都是由操作系统内核调度,并且在工作之前会注册到 Objective-C 垃圾收集器(在单独线程中运行)。

MacRuby 运行时现在不仅能够在线程之间共享状态,还能够同步访问这些线程结构,而不是只允许一个线程处于活跃状态。实现细节是这样的:

Core 对象包含了一个锁,这个锁在每一次存取共享数据结构的时候都被用到。共享的数据结构有这些:LLVM 缓存,多种 stub 缓存,BridgeSupport 缓存等。 所有的东西都会迁移到 VM 类,这个类是完全无锁的。当且仅当每个线程希望访问运行时的时候,按需创建 VM 对象。VM 对象包含了表示当前线程执行的数据结构,例如当前的块、绑定以及异常等。VM 有时候也会调用 Core(例如定义一个方法)请求 Core 锁,但是大多数时候它都是并行执行的。

新的线程系统现在已经在 MacRuby 代码库的实验性分支中可以找到,这个分支目标成为MacRuby 下一个版本。这个分支同时也包含了一个 MacRuby 构建的(简单的)web 服务器样例

一旦下一个稳定的 MacRuby 版本和新的线程代码一起发布,这就有三个 Ruby 的实现,包含并行线程的实现,无任何 GIL 的实现以及 Ruby 1.8(用户空间线程)和 Ruby 1.9.x 的实现。JRuby 和 MacRuby 都支持 Ruby 1.9.x 语言和库。

Ruby 1.9.x 也存在和 Python 一样的 GIL 问题,虽然 Unladen Swallow 项目承诺在 2010 年之前彻底移除 GIL(是否可能以及提供的补丁是否可能会集成到官方 Python 版本是另一回事 - 删除GIL 的补丁在最近十年内只是零星出现)。

最后的忠告:讨论Ruby 或者Python 中的GIL 经常会引发关于这些语言是否能够通过线程得到并发操作的争论。另外一个争论的焦点是GIL 是CPU 边界代码的唯一问题 - I/O 边界代码并不是问题,因为只要GIL 使当地释放,允许其他的线程在I/O 才做的时候运行。考虑到这些问题 - 你会怎么实现你的CPU 边界代码,使得它能够在Ruby 多核情况下使用?你关心过创建和管理多个OS 进程吗?

查看英文原文: MacRuby Drops GIL, Gains Concurrent Threads

2009-07-04 23:592223
用户头像

发布了 90 篇内容, 共 38.8 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

揭秘盒马鲜生,如何打破收益增长天花板!

博文视点Broadview

【遇见Doris】基于Apache Doris的小米增长分析平台实践

ApacheDoris

一套亿级用户的IM架构技术干货(下篇):可靠性、有序性、弱网优化等

JackJiang

智能家居操作系统谁最强?海尔智家独有“智家大脑”行业最领先

DT极客

Fluid 0.5 版本发布:开启数据集缓存在线弹性扩缩容之路

阿里巴巴云原生

容器 云原生 k8s 分布式数据库 调度

【疑难杂症】关于Github私有库问题

Sher10ck

GitHub pycharm

如何优化管理,打造高效的技术团队?

有只小耳朵

团队管理 技术管理 数字化转型

加入即可服务1.83亿个家!海尔智家让开发者面向亿万家庭

DT极客

Flink架构体系

大数据技术指南

大数据 flink 28天写作 3月日更

python 爬虫之selenium可视化爬虫

诡途

Python 爬虫 selenium

寻找被遗忘的勇气(二十二)

Changing Lin

3月日更

安卓最全面试考点与面试技巧,大厂直通车!

欢喜学安卓

android 程序员 面试 移动开发

启动延时缩短 50%-80%,函数计算发布镜像加速功能

阿里巴巴云原生

Docker 容器 开发者 云原生 存储

数据分析实战项目-蛋壳公寓投诉分析

诡途

Python 数据分析 蛋壳公寓

手把手教学基于深度学习的遥感影像倾斜框算法训练与分析

cv君

人工智能 深度学习 AI 智能 视觉

【活动回顾】5G时代的直播,将带来哪些低延迟体验

ZEGO即构

一气之下开发了个群聊机器人

诡途

Python 办公自动化 群聊机器人

2021年ONNX开发者大会即将召开

百度大脑

百度飞桨 ONNX

致远互联低代码平台让项目管理“秒变”数字化

爱极客侠

实时 摔倒识别 /运动分析/打架等异常行为识别/控制手势识别等所有行为识别全家桶 原理 + 代码 + 数据+ 模型 开源!

cv君

AI 目标检测 视频理解 引航计划

飞桨中国行首站重庆 解读产业 智造

百度大脑

百度 飞桨 中关村智酷

飞桨刷新分子性质预测榜单,助力AI药物研发

百度大脑

AI 药物研发 百度飞桨

问题排查 | 客户端突如其来的“白屏”等待

蚂蚁集团移动开发平台 mPaaS

html5 移动开发 mPaaS 离线包

数据产品经理实战-由BI到业务洞察

第519区

大数据 数据产品 数据分析体系

在这里,每一行代码都需要被认真对待

DT极客

首席AI架构师进阶之旅开启!第4期60位AICA学员硬核开学

百度大脑

AI 百度飞桨

Spark常见的故障排除

五分钟学大数据

大数据 spark 28天写作 3月日更

最全面试考点与面试技巧,面试必问

欢喜学安卓

android 程序员 面试 移动开发

最全模型效果评估报告上线,百度EasyDL助力模型效果快速优化

百度大脑

飞桨 EasyDL

入选Gartner全球AI报告,阿里云解读AI工程化的三大基础能力

阿里云大数据AI技术

机器学习 AI Gartner

C 语言性能优化:循环展开

1

编程 程序员 性能优化 C语言 循环展开

MacRuby放弃GIL,实现并发线程_Ruby_Werner Schuster_InfoQ精选文章