2009-12-19 72 views
2

Ruby 1.9有线程,但它们有很多问题 - 最大的一个问题是它们不能在同一个跨平台上工作(优先级的行为不同,loop {}在线程内会在Solaris中吃掉整个过程,但不是Linux和绿色线程等)。绕过Ruby 1.9的新“原生”线程

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

有没有办法可以绕过这个可靠吗?或者没有本地线程构建ruby 1.9?

我想我可以放弃旧的绿色线程类,但我不知道是否会允许线程安全的C扩展无法正常工作。

Ciao!

回答

1

AFAIK,Thread类是用C编写的,所以你必须重新编译Ruby版本,包括以前的实现。事实上,可能会有一些不兼容。

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

1

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

+0

我有一些错误:http://redmine.ruby-lang.org/issues/show/2359 我想我应该提交一个“这真的是我们想要做的”bug ... – 2009-12-20 05:03:55

+0

我刚刚提交了一个通用的错误我们将看到会发生什么。 http://redmine.ruby-lang.org/issues/show/2505 – 2009-12-20 05:08:39