我一直在阅读有关 Ruby 1.9 线程的信息,我看到所有 ruby 线程都通过全局解释器锁(朋友的 GIL),并且实际上不存在并发性。
我已经做了一个测试(没有任何信号也没有等待),使用线程的性能不仅没有提高,而且操作实际上比串行运行它们花费更多的时间
我的问题基本上是 - 如果这些线程不是并发的,它们有什么意义?有没有希望他们将来会同时出现?
我一直在阅读有关 Ruby 1.9 线程的信息,我看到所有 ruby 线程都通过全局解释器锁(朋友的 GIL),并且实际上不存在并发性。
我已经做了一个测试(没有任何信号也没有等待),使用线程的性能不仅没有提高,而且操作实际上比串行运行它们花费更多的时间
我的问题基本上是 - 如果这些线程不是并发的,它们有什么意义?有没有希望他们将来会同时出现?
许多其他 Ruby 解释器(JRuby、Rubinius)实际上并没有 GIL。此外,MRI 2.0 也将取消 GIL。
此外,在很多情况下(例如等待 IO 时),解释器确实会切换到另一个线程。因此,虽然它在技术上不是多线程(在 MRI/REE 1.9 的情况下),但它确实获得了一些好处。
并行性是不存在的,但 Ruby 线程不会阻止 Ruby 代码的并发执行。即使在单核机器上,并发代码执行也是可能的。我认为您只是将“并发”和“并行”这两个术语混为一谈。
有关更多详细信息,请参阅Jesse Storimer 的使用 Ruby 线程。