Ruby 1.9.1中的原生线程,对我来说是什么?

因此,Ruby 1.9.1现在声明稳定 。 Rails应该可以使用它,慢慢地将gem移植到它上面。

它具有本机线程和全局解释器锁(GIL)。

由于GIL到位,在1.9.1中本机线程是否比绿色线程提供任何好处?

1.9中的线程是本机的,但它们已经“减速”以允许一次只运行一个线程。 这是因为如果线程真正并行运行,它会混淆现有代码。

优点:

  • IO现在在线程中是异步的。 如果线程在IO上阻塞,则另一个线程将继续,直到IO完成。
  • C扩展可以使用真正的线程。

缺点:

  • 任何非线程安全的C扩展都可能存在使用Thread时很难找到的问题。 无法将扩展标记为线程不安全,以防止它与线程一起使用。
  • class级名称相同。 本机线程类应该被命名为其他类。
  • 最糟糕的是,线程在不同平台上的工作方式不同! 例如,Solaris,Windows和Linux之间的priority()不同。 像loop {}这样的东西在Linux中运行良好,其他线程有机会运行。 但是,在Solaris线程上,线程会占用进程的时间而你永远不会退出!

我认为最大的胜利是基于C的扩展可以释放GIL 。 因此,例如,MySQL适配器可以非常干净地运行长时间运行的数据库查询,而不会阻塞所有其他Ruby线程。