写点什么

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

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

关注

评论

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

人工智能与情感分析:理解情感,驱动未来

天津汇柏科技有限公司

情感分析 人工智能’

铜线工厂生产管理MES系统解决方案

万界星空科技

mes 万界星空科技 铜线mes 生产管理软件 铜线工厂

Loopback for Mac:打造专业音频环境,一键开启高效录音之旅!

Rose

FlagEval 7月榜丨新增29个模型评测结果,智源发布评估技术报告《AI大模型能力全景扫描》

智源研究院

江苏企业采购堡垒机推荐哪家?为什么?

行云管家

堡垒机 过等保 江苏

基于LangChain手工测试用例生成工具

测试人

软件测试

API Token 是什么?深入介绍与实践指南

Apifox

程序员 安全 Token API

utf8mb4 默认排序规则引起的索引失效

TiDB 社区干货传送门

应用适配 数据库连接

玳数科技集成 Flink CDC 3.0 的实践

Apache Flink

大数据 flink Flink CDC chunjun

tidb7.5.1压测

TiDB 社区干货传送门

性能测评 7.x 实践

2024 TDengine 用户大会:顶尖专家带你决胜 AI 新时代

TDengine

【第七在线】智能推算辅助选品组货 驱动零售品牌业绩增长

第七在线

什么?for循环也会出问题?

阿里技术

for循环 故障排查

FinClip 强势登陆 AWS Marketplace,全球扩展战略迈出关键一步

FinClip

星辰考古:TiDB v4.0 进化前夜

TiDB 社区干货传送门

版本升级 版本测评 新版本/特性解读

参加DevSecOps认证培训 ,掌握安全高效的软件开发

雅菲奥朗

运维 SRE DevSecOps

初识langchain:LLM大模型+Langchain实战[qwen2.1、GLM-4]+Prompt工程

汀丶人工智能

AI大模型

基于LangChain手工测试用例生成工具

测吧(北京)科技有限公司

测试

Pgsql 全量+增量迁移 tidb7.5

TiDB 社区干货传送门

7.x 实践

TiDB实践—索引加速+分布式执行框架创建索引提升70+倍

TiDB 社区干货传送门

7.x 实践

过等保时候常提到的堡垒机是什么?有什么用?

行云管家

等保 堡垒机 等级保护 过等保

国内大模型LLM选择以及主流大模型快速使用教程[GLM4/Qwen/Baichuan/Coze/Kimi]

汀丶人工智能

AI大模型

CVPR2024论文解读|对齐人类审美!MPS让图像生成评估更“懂你”

快手技术

开源 #大模型

GPT被封锁了怎么办?轻松获取高质量的数据,训练自己的人工智能和大语言模型。

热爱编程的小白白

降成本,提人效:火山引擎VeDI实验平台架构升级

字节跳动数据平台

大数据 A/B 测试 数字化增长

基于YMP工具实现Oracle迁移YashanDB

YashanDB

yashandb 崖山数据库 崖山DB

降低大模型推理87%时延!华为云论文入选顶会USENIX ATC'24

华为云开发者联盟

人工智能 存储 华为云开发者联盟 LLM 企业号2024年7月PK榜

基于 Three.js 的 3D 模型加载优化

vivo互联网技术

rust webassembly 3D模型 three.js web3d

解读「快意」大模型关键技术,揭秘实践中的挑战与创新

快手技术

NLP 大模型 #大模型

tidb源码研究分析日常碰到的bug

TiDB 社区干货传送门

TiDB 源码解读 6.x 实践 TiKV 源码解读

AI心灵伙伴:数业智能心大陆如何提升年轻成人的心理健康?

心大陆多智能体

压力 智能体 AI大模型 心理健康 数字心理

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