Ruby pre-1.9和Ruby 1.9线程之间有什么实际区别吗?

gra*_*tur 8 ruby multithreading

我试图理解1.9之前和1.9之前的Ruby线程之间的区别(在标准MRI实现中),但似乎就你可以用它们实现的好处而言,它们实际上是相同的.它是否正确?

从我有限的理解:

  • 1.9之前的线程是"绿色线程",这意味着它们由Ruby解释器管理,而不是操作系统.这样做的一个结果是,您永远不会实现真正的并发性,因为您永远不会同时运行多个线程(即使您使用的是多核/多处理器系统).(但是,如果执行在不同线程之间切换,例如,如果某个程序运行而另一个程序在I/O上等待,则可以获得并发的外观.)
  • 1.9线程是本机线程,这意味着它们确实由操作系统管理.如果没有全局解释器锁,这将允许Ruby同时运行多个线程(在多核/多处理器系统上).但Ruby 确实有一个全局解释器锁,这意味着只有一个线程可以运行,所以你再次得不到真正的并发.(但是如果执行在不同的线程之间切换,你仍然可以看到并发的外观.)

这是正确的,还是我错过了什么?1.9线程与1.9之前的线程(在MRI中)有什么好处?

Dig*_*oss 1

我觉得提供这个答案有点愚蠢,但你的描述完全符合我对情况的理解。

如果我们是对的,我应该补充一点,以这种方式发展语言确实有意义。

请记住,函数式编程、Actor 模型和其他共享内存替代并行模型的一个要点是解决开发并行共享内存应用程序的极端困难。(“线程被认为是有害的。”)

因此,对于 Ruby 从无并行到一切并行的期望过高。

目前的做法似乎是建立了机制但保留了巨锁。我认为将来,单独调试和测试的功能区域将被允许并行执行,因为它们接收细粒度锁和并发测试。