我试图了解 MRI Ruby 1.8 和 JRuby 之间不同线程模型的实际影响。
作为开发人员,这种差异对我意味着什么?
此外,MRI Ruby 1.8 中是否有任何实际的代码示例,由于不同的线程模型,它们在 JRuby 上的性能特征会更差?
我试图了解 MRI Ruby 1.8 和 JRuby 之间不同线程模型的实际影响。
作为开发人员,这种差异对我意味着什么?
此外,MRI Ruby 1.8 中是否有任何实际的代码示例,由于不同的线程模型,它们在 JRuby 上的性能特征会更差?
从线程的角度来看,在 2 核 CPU 上运行的线程程序将在 JRuby 上运行得比其他实现更快
许多现有的 ruby 库都不是线程安全的,因此 JRuby 的优势在很多时候毫无用处。
另请注意,如果要使用线程,许多 ruby 编程技术(例如类 vars)将需要额外的编程工作以确保线程安全(互斥锁、监视器等)。
JRuby 的线程是本机系统线程,因此它们为您提供了线程编程的所有好处(包括使用多个处理器内核,如果适用)。但是,Ruby 有一个全局解释器锁 (GIL),它可以防止多个线程同时运行。因此,唯一真正的性能差异是您的 MRI/YARV Ruby 应用程序将无法利用您的所有处理器内核,但您的 JRuby 应用程序会很高兴地这样做。
但是,如果这不是问题,MRI 的线程(理论上,我还没有测试过)会快一点,因为它们是绿色线程,使用更少的系统资源。YARV (Ruby 1.9) 使用本机系统线程。
我是一个普通的 JRuby 用户,最大的不同是 JRuby 线程是真正并发的。它们实际上是系统级线程,因此它们可以在多个内核上同时执行。我不知道 MRI Ruby 1.8 代码在 JRuby 上运行速度较慢的任何地方。你可以考虑看看这个问题红宝石有真正的多线程吗?.