代码之家  ›  专栏  ›  技术社区  ›  docwhat

绕过Ruby1.9的新“原生”线程

  •  2
  • docwhat  · 技术社区  · 15 年前

    Ruby1.9有线程,但它们有很多问题——最大的问题是它们不能在同一个跨平台上工作(优先级的行为不同, loop {} 在solaris中,线程内部会吃掉整个进程,但不会吃掉linux或绿色线程等)。

    但是,它们使新的本机线程类名与旧的绿色类相同:thread。

    有没有办法可靠地绕过这一点?或者在没有本机线程的情况下构建Ruby1.9?

    我想我可以把旧的绿色线程类放进去,但我不知道这是否会让线程不安全的C扩展正常工作。

    再见!

    2 回复  |  直到 15 年前
        1
  •  1
  •   Simone Carletti    15 年前

    afaik,thread类是用c编写的,因此您必须重新编译ruby版本,包括以前的实现。确实,可能有一些不相容之处。

    我对solaris和线程没有多少经验。如果您大量使用线程,一个可能的解决方案是使用jruby而不是标准的ruby实现。JRuBy基于JVM,并且具有与标准Java线程相媲美的本机线程。 我假设一个基于Java的环境将在Solaris上运行。

        2
  •  1
  •   sarahhodne    15 年前

    听起来像虫子。如果你能在 Ruby issue tracker ,那就太好了。至于你的问题,我不认为你能很容易地改变ruby处理线程的方式,但是看看 ./configure 选项( ./configure --help )看看有没有什么关联。