【问题标题】:Bypassing Ruby 1.9's new "native" threads绕过 Ruby 1.9 的新“原生”线程
【发布时间】:2009-12-19 04:22:42
【问题描述】:

Ruby 1.9 有线程,但是它们有很多问题——最大的问题是它们不能在同一个跨平台上工作(优先级表现不同,线程内的loop {} 会吃掉 Solaris 中的整个进程,但是不是 Linux 也不是绿色线程等)。

但是,他们使新的原生线程类名称与旧的绿色类相同:Thread。

有没有办法可靠地绕过这个?还是在没有原生线程的情况下构建 ruby​​ 1.9?

我想我可以删除旧的绿色 Thread 类,但我不知道这是否会允许非线程安全的 C 扩展正常工作。

Ciao!

【问题讨论】:

    标签: ruby


    【解决方案1】:

    AFAIK,Thread 类是用 C 编写的,因此您必须重新编译 Ruby 版本,包括以前的实现。确实,可能存在一些不兼容问题。

    我在 Solaris 和 Threads 方面没有太多经验。如果您主要使用线程,一种可能的解决方案是使用 JRuby 而不是标准的 Ruby 实现。 JRuby 基于 JVM,具有与标准 Java 线程相当的本机线程。 我假设基于 Java 的环境可以在 Solaris 上按预期工作。

    【讨论】:

      【解决方案2】:

      这听起来像是一个错误。如果您可以在Ruby issue tracker 报告它,那将非常好。至于你的问题,我认为你不能很容易地改变 ruby​​ 处理线程的方式,但是看看./configure 选项(./configure --help),看看那里是否有相关的东西。

      【讨论】:

      猜你喜欢
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      相关资源
      最近更新 更多