都2023了!我不允许你还不了解AIGC!立即报名 了解详情
写点什么

Rubinius 加入多虚拟机支持

  • 2008-01-16
  • 本文字数:945 字

    阅读完需:约 3 分钟

启动多个 Ruby 实例,而不必诉诸于执行 Ruby 可执行程序,存在着几种方法让你有据可循。 JRuby 允许在一个进程内部拥有多个 JRuby 实例,每个实例运行在各自拥有的本地线程之上。而对于 MRI, why the lucky stiff 则提供了沙箱版 Hack 代码来完成同样的工作。

最近, Rubinius 也为人们带来启动多个 Ruby 运行时的有效支持,用法如下:

vm = Rubinius::VM.spawn "blah", "-e", "puts 'hello\n'" vm.join p vm.stdout.gets为了了解上述代码的含义,我们请教了 Rubinius项目的 Evan Phoenix

在被问及多虚拟机(Multi-VM)背后的想法时,Evan 如是回答:

我一直都很清楚,我们应当以某种形式实现这样的功能。关于这项功能的计划各有千秋。是的,启动一个新的虚拟机来完成工作要容易得多,而真正的问题是具体要完成的工作是什么,是如何执行的 [……]。

接着 Evan 补充了一些实现细节

目前,每个虚拟机都运行在各自的本地线程中(在 Unix 下是 pthread)。这使得每个虚拟机独立运行,而无须知道其它虚拟机的存在,并且保证调度在虚拟机内部完全相同。 Rubinius 是一个表现非常良好的 C 程序,因为它没有使用任何全局变量或者其它,从而使得它的多个拷贝和平共存在同一个地址空间中。

请注意上面的最后一句话对于所有其它的多虚拟机方案也是成立的——一个调用了如System.exit()这样的全局静态方法或者使用了导致 JVM 崩溃的 JNI 代码的 JRuby 实例,也会同样关闭其它所有的 JRuby 实例。

另外一个有趣的话题是,如何使多个虚拟机相互通信

管道是其中(的方式)之一。是的,对于子虚拟机,stdio 会被重定向到管道。我也已经加入另一个非常简单的共享消息传递系统。一个虚拟机可以使用一个顶级的单一机制向另一个发送信息。这个机制是虚拟机之间进行交互的唯一途径。并且它还将消息编组到它的共享存储区,这样在虚拟机之间就不存在指针共享了。 现有的共享消息传递机制还可以被扩展,使用共享内存来允许消息在(操作系统)进程之间轻松传递。

这项功能现已存在于 Rubinius 的 git 库中(请参见 InfoQ 关于使用 git 访问 Rubinius 代码库的报道)。如果你只想快速浏览 Rubinius 的源码,那么可以通过这个Web 界面访问Rubnius 的git 代码库。例如,这个链接就是上面提到的消息传递系统相应提交的代码

查看英文原文: Rubinius adds Multi-VM support

2008-01-16 13:30564
用户头像

发布了 117 篇内容, 共 13.8 次阅读, 收获喜欢 0 次。

关注

评论

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

开源镜像仓库Harbor的镜像安全

运维研习社

Docker Harbor 漏洞扫描 镜像安全 私有仓库

硬件设计必备,电子元器件高清矢量图

不脱发的程序猿

硬件产品 28天写作 硬件设计 电子元器件矢量图 3月日更

话题讨论 | 又一家大厂进入汽车领域,"百车大战"即将来临?

程序员架构进阶

话题讨论 七日更 28天写作 话题王者 3月日更

如何设计三极管控制继电器电路

不脱发的程序猿

28天写作 电路设计 继电器电路设计 三极管 3月日更

写作平台的一些乱象

ES_her0

28天写作 3月日更

架构学习(2021年03月06日)

张小胖

Docker部署ClickHouse监控平台

wjchenge

简单工厂模式、工厂模式、抽象工厂模式比较

良知犹存

设计模式

金三银四程序员面试必备:2021最新 最全面Java复习路线!已收录GitHub

比伯

Java 编程 程序员 架构 面试

MySQL 数据查询语言(DQL)& 事务控制语言(TCL)详解

若尘

MySQL

翻译:《实用的Python编程》04_00_Overview

codists

Python

Redis 与 I/O 多路复用模型

小方

redis

力扣(LeetCode)刷题,简单题(第21期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

Oracle table()函数的合理运用,提高工作效率

xiezhr

oracle table() Oracle函数 3月日更

新业务团队应用数字化的4个能力

boshi

数字化转型 七日更

18 个 Java8 日期处理的实践,太有用了!

xcbeyond

Java java8 日期处理 3月日更

Wireshark数据包分析学习笔记Day3

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

程序员必须知道的数据结构:队列与栈

老王说编程

数据结构 队列

最全Hive SQL语法、Hive函数及使用注意事项(一)

五分钟学大数据

大数据 Hive SQL 28天写作 3月日更

萌新不看会后悔的C++基本类型总结(二)

花狗Fdog

LeetCode题解:714. 买卖股票的最佳时机含手续费,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

用c++创作一个简单小游戏

张鹤羽

28天写作 3月日更

程序员必须知道的数据结构:线性表与链表

老王说编程

Java 链表 线性表

虚拟化存储

lenka

产品经理 3月日更

Elasticsearch Index Types and Mappings

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

mock 请求分发

blueju

JavaScript React Mock umi umijs

恋物志(二):独居者的智能生活指南

脑极体

简易项目搭建 Models层封装

happlyfox

学习 28天写作 3月日更

常见的设计模式原则

一个大红包

设计模式 设计原则 28天写作 3月日更

程序员必须知道的数据结构:HashMap 与 LinkedHashMap

老王说编程

Java 数据结构 hashmap

kvm

梅花鹿鹿

kvm

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
Rubinius加入多虚拟机支持_Ruby_Werner Schuster_InfoQ精选文章