阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

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

关注

评论

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

单元测试的重要性:编写更安全、更可靠的代码

高端章鱼哥

测试 单元测试

五个很实用的IDEA使用技巧

越长大越悲伤

Java Python IDEA pycharm

腾讯云大数据平台 TBDS全面升级,加速构建安全可控的大数据生态

腾讯云大数据

TBDS

2023英特尔on技术创新大会:助力开发者,让AI无处不在

E科讯

【腾讯云 TDSQL-C Serverless 产品测评】"橡皮筋"一样的数据库

指剑

腾讯云 Serverless 数据库、

极光笔记 | 大语言模型插件

极光JIGUANG

人工智能 插件 AIGC 大语言模型

Live Home 3D Pro for mac(3D家居设计软件) 4.8中文激活版

mac

windows 3D家居设计软件 苹果mac Live Home 3D Pro

利用Linux虚拟化技术实现资源隔离和管理

这我可不懂

Linux 计算资源

开启全球化新篇章,数字经济推动消费出海论坛在京召开

千流出海

出海 消费品企业 出海企业

华为重磅亮相 KubeCon China 2023,与你共启大模型时代的云原生!

华为云开源

云原生 华为云 KubeCON

CodeArts Check代码检查服务用户声音反馈集锦(4)

华为云PaaS服务小智

云计算 华为云 代码检查

英特尔首席执行官帕特·基辛格会前畅谈2023年on技术创新大会

E科讯

StarRocks 社区:从初生到两周年的进化之路

StarRocks

数据库 大数据 数据仓库 数据湖 湖仓一体

解锁 zkSync Era:开创全新的 Layer 2 扩展时代

Footprint Analytics

以太坊 eth Layer 2

eBPF 仅仅是实现可观测性的一种手段

JainChen

可观测性 ebpf Kubernetes, 云原生, eBPF #监控

火山引擎A/B测试在消费行业的案例实践

字节跳动数据平台

数据库 ab测试 对比实验 数字化增长 企业号9月PK榜

至顶科技携手中青博联发布品牌升级千流出海计划 助力中国企业走向海外市场

千流出海

出海 出海服务商

满足更高算力需求,英特尔率先推出用于下一代先进封装的玻璃基板

E科讯

Lightroom Classic 2023 for Mac(摄影后期图像编辑工具) v12.4中文激活版

mac

windows 图像处理软件 苹果mac Lightroom Classic 2023 lrc

大模型时代,如何快速开发AI应用

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号9月PK榜

CodeArts Check代码检查服务用户声音反馈集锦(5)

华为云PaaS服务小智

云计算 软件开发 华为云 代码检查

AI在玩一种很新的艺术,700万网友在线围观,ControlNet又立功了

Openlab_cosmoplat

AI

超详细API插件使用教程,教你开发AI垃圾分类机器人

华为云开发者联盟

人工智能 API 华为云 华为云开发者联盟 企业号9月PK榜

基础概念回顾:云原生应用交付

NGINX开源社区

云原生 应用交付 基础概念

QCN9074 QCN9024|Qualcomm Tri-band M.2 PCIE4X4 WIFI6E MU-MIMO Network Card DR9074

wallyslilly

QCN9074 QCN9024

提升开发效率的低代码思路

树上有只程序猿

软件开发 低代码 可视化开发

免费、安全、可靠!一站式构建平台 ABS 介绍及实例演示 | 龙蜥技术

OpenAnolis小助手

开源 操作系统 龙蜥社区 龙蜥大讲堂 abs

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