gpt4 book ai didi

ruby-on-rails - Ruby/Rails 线程安全

转载 作者:数据小太阳 更新时间:2023-10-29 06:33:19 24 4
gpt4 key购买 nike

我时常研究 Ruby,但我没有用它做过任何大的或多线程的事情。我听说 MRI 只支持绿色线程,而 JRuby 通过 JVM 支持 native 线程。然而,我偶然发现博客和讨论组上的评论说“Rails 不是线程安全的”或者 Ruby 本身不是线程安全的。例如有人评论说 require 语句有问题。这听起来有点基础。

我见过很多不能正确处理并发的 Java 应用程序,我时不时地做噩梦 :-) 但至少你可以用 Java 编写线程安全的应用程序如果您真的知道自己在做什么(这并不容易)。

这一切听起来很令人震惊,有人可以详细说明一下吗?到底是什么问题,如果是这种情况,Rails 是如何设法工作的?我可以编写在没有竞争条件和死锁的情况下正常工作的多线程 Ruby 代码吗?它是否可以在 JRuby 和 MRI 之间移植,或者我是否必须修改 JVM 特定代码才能正确利用 JVM native 线程?

编辑:

我应该问两个问题,因为人们似乎只回答 Rails 线程的问题(这本身就很好)和绿色线程与 native 线程。我对有关线程安全 的核心 Ruby 问题的担忧并未真正得到解决。似乎至少有一个(未解决?)issue在某些情况下需要。

最佳答案

首先是 Ruby 1.9(最新的官方版本)now uses native (kernel) threads .以前版本的 Ruby 使用绿色线程。简明扼要地回答您的问题,在 1.9 之前,线程在大大小小的 Ruby 应用程序中并不常用,正是因为它们不是特别安全或可靠。

这并不是特别令人担忧,因为在 2.2 版之前,Rails 并未尝试实现线程安全,因此我们通常通过使用多进程、数据库记录锁定和消息队列(如 Starling)来处理异步处理。 .这通常是扩展 Web 应用程序的一种非常可靠的方法——至少与不正确的多线程 Java 应用程序一样可靠——并且具有额外的优势,即可以更轻松地将应用程序横向扩展到多个处理器和服务器。

我不知道您提到的“要求”问题是否已在 1.9 中得到解决,但我敢冒昧地说,如果您在新线程中动态要求库,那么您将遇到不止一个可维护性问题。

如果您想完全避免线程,Ruby 1.9 also supports fibers ,它采用了一种无共享的并发方法,据我所知,它通常比线程更容易编写和维护。 Performance numbers here .

关于ruby-on-rails - Ruby/Rails 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/647642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com