Ruby 1.9.1中的本机线程,对我来说是什么?

Sam*_*ron 5 ruby concurrency

因此,Ruby 1.9.1现在声明稳定.Rails应该与它一起工作,慢慢地将宝石移植到它上面.

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

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

doc*_*hat 7

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

优点:

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

缺点:

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


Sam*_*ron 5

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