`

Ruby对多线程的支持

阅读更多
1. 我们通常说的Ruby,一般指的MRI 即"Matz's Ruby Implementation", CRuby or MatzRuby,MRI的在解释器里的Ruby线程是Green Thread,而且不幸的,这些线程不予能并行地调度,因此一次只能跑一个线程。

不过扩展的C类库(比如Fiber),可以并行地运行多个C线程。

2. 接下来是YARV(即Yet Another Ruby VM),YARV的线程是以POSIX或者WinNT线程实现的,它采用了Global Interpreter Lock (GIL)来确保在任何时候只有一个Ruby线程可以被调度。

和MRI一样,C线程可以和Ruby线程同时运行。未来, GIL可能会被fine-grained locks取代,这样越来越多的代码就可以并行地运行,不过这个还没提上议事日程呢。

3. JRuby以原生线程的方式实现Ruby线程,这儿的“原生线程”当然指的是"JVM线程“。JRuby并未增加额外的锁。因此,这些线程是否能并行的运行,取决于JVM,有些JVM采用了OS线程而有些只是Green Treahd.

4. XRuby也是以JVM线程的方式实现Ruby线程。

5. IronRuby也是以原生线程的方式实现ruby线程,这儿的“原生线程”指的是CLR线程,Ironruby也未增加额外的锁,因此只要你的CLR支持多线程,你的Ironruby线程就能并行
运行。

6. Ruby.NET也是以CLR线程的方式实现Ruby线程。

7. Rubinius在它的虚拟机中以Green Thread的方式实现Ruby线程。特别之处的是Rubinius的虚拟机十分轻巧,具有非常弹性的concurrency/parallelism/non-local的结构,称为“任务”,而其他的concurrency constructs (Threads in this discussion, but also Continuations, Actors and other stuff) are implemented in pure Ruby, using Tasks.

Rubinius 现在无法并行地调度线程,虽然正佳这项特性并无太大问题。 Rubinius可以在一个进程的多个POSIX线程中运行多个虚拟机实例。由于线程是采用Ruby语言实现的,因此它们可以像其他Ruby对象一样,被串行化到另一个线程中的另一个虚拟机实例。 (That's the same model the BEAM Erlang VM uses for SMP concurrency. It is already implemented for Rubinius Actors.)

8. MacRuby开始只是YARV在Objective-C运行时和CoreFoundation Cocoa Frameworks上的实现. It has now significantly diverged from YARV, but AFAIK it currently still shares the same Threading Model with YARV.

9.
Cardinal is a Ruby Implementation for the Parrot Virtual Machine. It doesn't implement threads yet, however, when it does, it will probably implement them as Parrot Threads.

10.
MagLev is a Ruby Implementation for the GemStone/S Smalltalk VM. I have no information what threading model GemStone/S uses, what threading model MagLev uses or even if threads are even implemented yet (probably not).

11.
HotRuby is not a full Ruby Implementation of its own. It is an implementation of a YARV bytecode VM in JavaScript. HotRuby doesn't support threads (yet?) and when it does, they won't be able to run in parallel, because JavaScript has no support for true parallelism. There is an ActionScript version of HotRuby, however, and ActionScript might actually support parallelism.

分享到:
评论
2 楼 ray_linn 2011-03-30  
呵呵,我只是在搜集点材料,想把mongodb里的javascript换掉
1 楼 mathgl 2011-03-28  
似乎 类似 python,ruby这种 都不怎么支持 多线程的用法。现在基本上倾向于使用

多进程的架构。。

相关推荐

    Ruby多线程编程初步入门

    ### Ruby多线程编程初步入门 #### 一、引言 多线程编程是现代软件开发中的重要组成部分,尤其对于需要高效并发处理的任务而言更是如此。Ruby作为一种灵活且功能强大的编程语言,在支持多线程方面提供了丰富的工具...

    多线程和并行程序设计

    在Java中,这一技术通过内置的多线程支持得以实现,而线程作为执行任务的基本单位,是程序多任务运行的基础。 在单处理器系统中,线程的并发执行是通过分时共享CPU时间完成的。操作系统通过调度算法,合理分配时间...

    Working with Ruby Threads

    这些实现通常利用Java虚拟机(JVM)或C++编译器,提供了更好的多线程支持。 #### 如何决定线程数量 - **所有线程**:有时可能会尝试创建尽可能多的线程来利用所有可用的处理器核心,但这并不总是最佳选择。 - **I/...

    Ruby资源ruby-v3.1.1.zip

    4. **线程局部变量**:Ruby 3.1增加了对线程局部变量的支持,这些变量在每个线程中都有独立的副本,提高了多线程编程的安全性和效率。 5. **改进的错误消息**:错误消息现在更加详细,包含更多信息,帮助开发者更快...

    Working with Ruby Threads(完整版)

    而JRuby,作为Java平台上的Ruby实现,利用了Java虚拟机的线程机制,支持抢占式多线程。 1. **线程创建**:在Ruby中,可以通过`Thread.new`来创建一个新的线程。例如: ```ruby thread = Thread.new { puts "Hello...

    Ruby-rubyinstall安装RubyJRubyRubiniusMagLevorMRuby

    JRuby的最大优点是与Java库的无缝集成,以及在多线程环境下的高效执行。 3. Rubinius:Rubinius是一个用Ruby语言大部分实现的虚拟机,其目标是提供一个高性能的、符合Ruby语言规范的平台。它使用LLVM作为后端,支持...

    如何能让Ruby性能增加30%

    在多线程环境中,频繁地进行信号掩码的修改可能会对性能造成影响。 文章中提到的测试代码创建了两个线程并执行了一个简单的循环操作,通过`strace`工具观察系统调用,发现在启用线程的情况下,有大量的`rt_...

    线程与并发:Ruby并行世界的探索之旅

    Ruby 通过提供多线程和并发支持来增强应用程序的性能。然而,需要注意的是 GIL 对线程并行执行的限制。理解线程、并发模型以及同步机制对于编写高效、稳定的 Ruby 程序至关重要。 #### 展望未来 随着 Ruby 解释器...

    Ruby-Puma一个Ruby的并发Web服务器

    1. **并发模型**:Puma使用多线程模型处理请求,这使得它能够在单个进程中并发地服务多个连接。它通过避免线程切换开销,实现了更高的效率。Puma还支持工作进程模式,即通过创建多个进程来分散负载,提高系统的整体...

    ruby语言帮助文档(简体中文)

    JRuby和Rubinius等其他实现则支持真正的多线程。 这个中文帮助文档会详细解释以上所有概念,并提供实例和实践建议,帮助开发者深入理解和掌握Ruby语言。无论是初学者还是有经验的程序员,都可以从中受益,提升自己...

    ruby初学者教程(对初学者很有帮助)

    Ruby支持多线程编程。 ```ruby thread = Thread.new do sleep 1 puts "Thread finished." end thread.join ``` **10.2 多进程处理** Ruby还支持多进程编程,尽管不是原生支持。 ```ruby pid = fork do puts ...

    ruby-2.7.1.zip

    在Ruby的并发和异步编程方面,这个版本提供了更好的线程局部存储支持,允许开发者更安全地在多线程环境中存储局部数据。此外,`Mutex`和`ConditionVariable`等并发原语的性能也得到了增强。 Ruby 2.7.1在兼容性上也...

    RUBY 教程.doc

    4. **并发编程:** 支持多线程和协程,可以轻松实现复杂的并发逻辑。 #### 六、资源链接汇总 - **RUBY语言入门教程.pdf**:提供了RUBY基础知识的详细讲解。 - **http://download.csdn.net/detail/Sevk/659363**:...

    ruby入门到精通

    10. **线程与并发**:Ruby支持多线程编程,虽然全局解释器锁(GIL)限制了并行执行,但在某些场景下仍能实现高效的并发处理。 11. **Ruby on Rails**:Ruby的一个著名框架,用于快速开发Web应用。虽然书名没有直接...

    ruby-2.6.3源码压缩包

    4. **改进的并发模型**:Ruby 2.6加强了线程和并发处理,如更好的线程局部变量支持,以及线程池的优化,提升了多线程环境下的程序性能。 5. **新的垃圾回收(Garbage Collection, GC)算法**:引入了Shenandoah垃圾...

    ruby 1.9.3

    同时,1.9.3还引入了线程局部变量,为多线程编程提供了更好的支持,使得并发编程成为可能。 在类和模块方面,Ruby 1.9.3增加了`Module#prepend`方法,允许模块的代码在被包括的类的实例方法之前执行,提供了新的...

    ruby中文 文档

    9. **线程和并发**:Ruby支持多线程,文档会解释如何创建和管理线程,以及并发编程的注意事项。 10. **Gem包管理**:Ruby的Gem系统是其生态系统的核心部分,文档会介绍如何安装、使用和创建Gem包。 11. **Ruby on ...

Global site tag (gtag.js) - Google Analytics