`
andyhu1007
  • 浏览: 198989 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

线程安全的Rails

阅读更多

Thread Safe Rails? 关于线程安全的Rails,请大家慎重采用,具体看这篇文章:http://m.onkey.org/thread-safety-for-your-rails

 

上一个项目我们怀着战战兢兢的心情开启了多线程,结果是出乎意料得好。开启多线程后没遇到什么困难,可能会遇到的问题有两点:

 

1. 去掉class variable (当然,基本上你不应该使用类变量)

 

2. 另外一件事情,就是在multiple threads下面Rails需要eager load libs。请移步:http://gigix.thoughtworkers.org/2009/7/17/move-to-multi-threaded-rails

 

 

多线程的Rails对于performance有极大提升,请再次移步:http://blog.headius.com/2008/08/qa-what-thread-safe-rails-means.html   (请自行fan qiang)

 

基本上意思是内存使用量的锐减和数据库连接资源的优化:

 

写道
In a typical Mongrel setup, handling 10 concurrent requests means you have to have 10 copies of Rails loaded, 10 copies of your application loaded, 10 in-memory data caches, 10 database connections...everything has to be scaled in lock step for every additional request you want to handle concurrently.

 

写道
Instead of a single database connection for a given Rails instance, there will be a pool of connections, allowing N database connections to be used by the M requests executing concurrently. It also means allowing requests to potentially execute without consuming a connection, so the number of live, active connections usually will be lower than the number of requests you can handle concurrently.
 

References:

 

教程: http://m.onkey.org/2008/10/23/thread-safety-for-your-rails

Slides:  http://www.slideshare.net/Naoto.Takai/jruby-on-rails-and-thread-safety-presentation 
Q & A: http://stackoverflow.com/questions/647642/ruby-rails-thread-safety

 

----EOF----

3
0
分享到:
评论
2 楼 andyhu1007 2010-04-10  
robbin 写道

何况多进程rails都是每进程hold一个持久连接,数据库资源利用很充分,谈不上多线程能够节省,何况多线程调度连接池也有额外的开销和复杂度。


headius说道:

引用
It also means allowing requests to potentially execute without consuming a connection


potentially~~
1 楼 robbin 2010-04-10  
ruby本地的lib不是线程安全的,你多线程rails读取本地lib如果遇到阻塞调用整个进程会被全部挂起。

何况多进程rails都是每进程hold一个持久连接,数据库资源利用很充分,谈不上多线程能够节省,何况多线程调度连接池也有额外的开销和复杂度。

最后,多进程 vs 多线程 从性能,可扩展性和稳定性来说,多线程并没有什么优势。

相关推荐

    rails2-sample

    这一部分将覆盖一些高级的Rails主题,如性能优化、多线程和并发处理、部署策略等。对于想要深入了解Rails框架并构建高性能Web应用的开发者来说,这些知识是必不可少的。 #### 10. Rails Plugins(Rails插件) ...

    jRuby On Rails WEB2.0

    JRuby是一种Ruby语言的实现,它运行在Java虚拟机(JVM)上,能够充分利用Java平台的强大功能,如垃圾回收、线程安全以及与Java库的无缝交互。JRuby的出现使得Ruby代码能够在Java环境中运行,同时保持了Ruby的动态性...

    rails 部署 nginx

    在部署Rails应用时,还需要考虑性能优化,比如启用HTTP缓存,调整Nginx的连接超时时间,配置Rails应用的线程池大小,以及使用如 unicorn 或 puma 这样的多进程或多线程服务器。 7. **部署工具**: 为了自动化部署...

    Rails3 使用rake启动后台任务

    Rails3 是 Ruby on Rails 框架的一个版本,它在2010年发布,引入了许多新特性并改进了框架的性能。Rake 是 Ruby 的一个构建工具,类似于 Java 的 Ant 或者 Python 的 setup.py,它允许开发者用自然语言定义任务,并...

    ruby on rails 常用插件下载

    Rails 默认并不完全支持多线程,因为 Ruby 的 GIL(全局解释器锁)会限制同一时刻只有一个线程在执行,但这并不意味着我们无法在 Rails 中实现多线程。通过一些特定的库和插件,我们可以绕过这个限制,例如使用 `...

    rails22新添功能.pdf

    Rails 2.2对线程安全性进行了优化,并且增加了对Ruby 1.9的支持。Ruby 1.9的发布标志着Ruby语言的重大升级,带来了许多性能上的提升和新特性。为了确保Rails能够在新版本的Ruby上运行得更加顺畅,开发团队进行了大量...

    2009 KungFu Rails大会JRuby演讲PPT

    2. **性能优化**:由于JRuby运行在JVM上,因此可能讨论了如何利用JVM的多线程和内存管理特性,以及如何通过调优JRuby和Rails应用来提高性能。 3. **企业级集成**:JRuby的Java兼容性使得它可以方便地与企业级Java...

    jruby_on_rails

    2. **无缝集成 Java 类库**:使用 JRuby on Rails,你可以直接调用 Java 代码,这意味着你可以利用 Java 生态系统中的丰富类库,如数据库驱动程序、企业服务和安全框架。 3. **部署灵活性**:JRuby on Rails 应用...

    Working with Ruby Threads

    #### Rails中的线程安全 - **Gem依赖**:确保项目中使用的第三方Gem是线程安全的,以避免引入潜在的问题。 - **请求边界**:每个HTTP请求被视为一个独立的单元,可以在这个边界内实现线程安全。 #### 抽象线程 - ...

    敏捷Rails中文教程

    - **多线程与并发**:Ruby支持多线程编程,但需要注意的是,由于全局解释器锁(GIL)的存在,真正的并行执行在默认的Ruby实现中受限。 #### 五、Rails框架深入 - **路由(Route)**:Rails使用声明式的路由方式,使得...

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

    - **线程安全**:在多线程环境下,确保代码执行不会因并发操作导致数据不一致或错误的情况发生。 Ruby 提供了一个 `Thread` 类来创建和管理线程。例如,下面的代码展示了如何创建并启动一个简单的线程: ```ruby ...

    gettext_i18n_rails:Rails:FastGettext,I18n集成-简单,线程安全且快速!

    / Rails集成。 通过FastGettext进行翻译,将任何其他I18n后端用作扩展/后备。 Rails这样做:使用嵌套的yml文件的I18n.t('syntax.with.lots.of.dots')我们这样做: _('Just translate my damn text!')使用简单,平坦...

    lookup_by:ActiveRecord的线程安全查找表缓存

    LookupBy是ActiveRecord的线程安全查找表缓存,可减少标准化的麻烦。 可配置的查询列 缓存(直读,直写,最近最少使用(LRU)) 符号值 标准化值,例如在查找之前规范化UTF-8 依存关系 Rails 5.0+(已在Rails 5.0...

    Rails相关电子书汇总二

    4. **安全和性能**:最佳实践,如限制并发连接数、防止DDoS攻击等。 5. **日志管理和错误处理**:如何收集和分析Mongrel的日志,以及错误处理策略。 6. **扩展和集成**:与外部服务如数据库、缓存的集成,以及自定义...

    ruby2-rails5-bootstrap-heroku:一个基于Ruby 2.6,Rails 5.2,Webpack 4,Yarn和Bootstrap 4的坚定的入门应用程序,可部署在Heroku上

    如果您的应用程序不是线程安全的或者您不知道,请将puma在Heroku上可用的最小和最大线程数设置为1: $ heroku config:set RAILS_MAX_THREADS=1 主密钥 Rails 5.2引入了。 该存储库使用的主密钥为: b8cc3ac9ab8a...

    新书\"Rails 3 in Action\"介绍与下载

    Rails 3版本是该框架的重要里程碑,引入了许多新特性,如ActionPack、ActiveRecord、ActiveModel和ActionMailer等组件的升级,以及对多进程和多线程的支持,提高了性能和可扩展性。 书中首先会介绍Rails的基础知识...

    good_job:Ruby on Rails的基于Postgres的多线程ActiveJob后端

    做得好 GoodJob是Ruby on Rails的基于Postgres的多线程ActiveJob后端。 受和启发,GoodJob旨在与Ruby on Rails,ActiveJob和Postgres最大限度地兼容,从而使它们对大多数工作负载都简单易行。 专为ActiveJob设计。 ...

Global site tag (gtag.js) - Google Analytics