我知道ruby使用green threads的"协作"线程.如何在应用程序中创建真正的"操作系统级"线程,以便使用多个cpu内核进行处理?

推荐答案

Updated with Jörg's Sept 2011 comment

你似乎混淆了两个very种不同的东西:

(不幸的是,在这11种实现中,只有两种是实际的.)

  1. 第一个实现实际上没有名称

    它有时也被称为"MRI"(代表"Matz的Ruby")

    MRI implements Ruby Threads as Green Threads within its interpreter.不幸的是,它不允许这些线程

    但是,可以运行任意数量的C线程(POSIX线程等)

  2. 第二个实现是YARV(简写为"尚未"

    像MRI一样,C线程can实际上与Ruby线程并行运行.

    在future ,GIL might可能会损坏

  3. JRuby implements Ruby Threads as Native Threads,

  4. XRuby也有implements Ruby Threads as JVM Threads.Update:XRuby死了.

  5. IronRuby implements Ruby Threads as Native Threads,

  6. Ruby.NET也有implements Ruby Threads as CLR Threads.Update:鲁比.NET死了.

  7. Rubinius implements Ruby Threads as Green Threads within its Virtual Machine. 更准确地说:鲁宾尼乌斯

    Rubinius(目前)无法并行调度线程,

    Update:这个答案中关于Rubinius的信息是关于猎枪虚拟机的,它已经不存在了."新"C++ VM不使用跨多个VM(即Erlang /Bar样式)调度的绿色线程,它使用了一个更传统的单一VM,它具有多个原生OS线程模型,就像CLR、莫诺河和几乎所有JVM所使用的一样.

  8. MacRuby号最初是亚尔夫港的一个港口

  9. CardinalParrot Virtual Machine的Ruby实现.然而,它还没有实现线程,

  10. MagLevGemStone/S Smalltalk VM的Ruby实现.我没有关于线程模型的信息

  11. HotRuby是它的完整Ruby实现

不幸的是,这11个Ruby实现中只有两个是

所以,如果你想要真正的并行线程,JRuby目前是你的首选

否则,"classic "的Ruby解决方案就是使用进程

Ruby相关问答推荐

鲁比.METHOD_MISSING+SEND对于带有命名参数的混合参数失败

判断数组中的字符串是否包含另一个数组中的子字符串

使用 Ruby,是否可以将 BigDecimal("1") / BigDecimal("3") 打印为 0.3333333333333... 到任意长度?

有没有办法在 Capybara 中保持登录状态?

如果 Java 人go Scala,C# go F#,那么 Ruby 人go 哪里寻求函数式?

osx bash上的树命令

如何使用 RVM 重新编译 ruby​​?

判断 Ruby HTTP 响应是否成功

扩展self 和module_function一样吗?

Ruby - 查看端口是否打开

我不明白Ruby本地范围(local scope)

Ruby 中方法名称的限制是什么?

如何按字母顺序排列忽略大小写的数组?

如何获取符号链接的目标?

比较两个数组忽略Ruby中的元素顺序

对哈希中数组的值求和

如何在 Ruby 中编写复杂的多行 if 条件?

如何计算 Ruby 数组中的重复元素

如何在 Ruby 中将时间四舍五入到最接近的 15 分钟?

如何使用 minitest 运行所有测试?