【问题标题】:Native threads in Ruby 1.9.1, whats in it for me?Ruby 1.9.1 中的本机线程,对我有什么好处?
【发布时间】:2025-12-05 06:15:01
【问题描述】:

所以,Ruby 1.9.1 现在是 declared stable。 Rails 应该可以使用它,并且慢慢地将 gem 移植到它。

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

由于 GIL 已经到位,与 1.9.1 中的绿色线程相比,本机线程是否有任何好处?

【问题讨论】:

    标签: ruby concurrency


    【解决方案1】:

    1.9 中的线程是本机的,但它们已被“放慢”以允许一次只运行一个线程。这是因为如果线程真的并行运行,它会混淆现有代码。

    优点:

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

    缺点:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        最近更新 更多