2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:592212
用户头像

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

关注

评论

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

科班出生和培训出身的前端程序员哪个好?

小谷哥

【重磅干货】如何构建 API 生态促进企业上下游合作

石臻臻的杂货铺

API

扬州万方:基于申威平台的 Curve 块存储在高性能和超融合场景下的实践

网易数帆

nvme 分布式存储 curve 12 月 PK 榜

Java本地高性能缓存实践

阿里技术

cache 本地缓存 缓存Java

百度工程师教你玩转设计模式(装饰器模式)

百度Geek说

Java 设计模式 12 月 PK 榜 装饰器模式

“自动驾驶+昇腾AI” 西安交大团队解决高级辅助驾驶的关键难题

极客天地

中移链已在BSN-DDC基础网络上线元交易功能

BSN研习社

BSN-DDC

金融科技 DevOps 的最佳实践

SEAL安全

DevOps 最佳实践 FinTech 12 月 PK 榜

【12.16-12.23】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动

大数据开发培训机构有哪些?

小谷哥

JAVA培训学习后就业好吗

小谷哥

带你玩转OpenHarmony AI:打造智能语音子系统

OpenHarmony开发者

OpenHarmony

阿里灵杰:与开发者一起推动AI创新落地

阿里云大数据AI技术

人工智能 阿里云 开发者 AI技术

Dubbo架构设计与源码解析(三)责任链模式

京东科技开发者

dubbo 过滤器 filter 责任链 provider

借力 StarRocks,"陆战之王" 大润发如何在零售业数字化转型中抢占先机?

StarRocks

数据分析 零售

火山引擎DataTester上线“流程画布”功能,支持组合型A/B实验分析

字节跳动数据平台

大数据 AB testing实战 12 月 PK 榜

前端培训学习后好就业吗?

小谷哥

敏捷价值流管理

敏捷开发

敏捷 敏捷开发 价值流 价值流管理

培训学习大数据门槛低吗

小谷哥

WorkPlus助力中交四航局打造数字化管理新模式,释放企业生产力

BeeWorks

企业IM软件WorkPlus,组织高效协作与一体化办公首选

BeeWorks

你的企业IM安全吗?对于私有化的即时通讯软件你了解多少?

BeeWorks

一文掌握MyBatis的动态SQL使用与原理

华为云开发者联盟

sql 开发 华为云 12 月 PK 榜

教你用JavaScript实现随机点名器

小院里的霍大侠

JavaScript 初学者 入门实战

搭建"积木"=编程?

间隔

如何保证设计出合理的架构1-4

程序员小张

「架构实战营」

携手 StarRocks 打造极速统一数据底座,理想汽车获 DAMA 中国 “数据治理最佳实践奖”

StarRocks

开源工具系列1:Cloud Custodian

HummerCloud

云计算 云安全

AI技术实践|用腾讯云智能文本图像增强打造一个掌上扫描仪

牵着蜗牛去散步

人工智能 腾讯云 文字识别 图像处理

BitSail issue持续更新中,快来挑战,赢取千元礼品!

字节跳动数据平台

大数据 开源 12 月 PK 榜

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