`

Rails Ruby 线程 进程 和相关资料的杂烩

阅读更多
机器人在Rails中的 Model中使用current_user的问题进行了一些讨论,引发了一些想法,相关的资料杂烩一下,以便于自己和各位日后参考。

首先,Rails从2.2开始支持线程安全,这个可以参照官方2.2 release的说明

这个也很说明问题
Thread safety for your Rails

那么,或者,我们比较初级想知道,到底线程安全啥意思,有什么好处呢那么参考下面
What Thread-safe Rails Means

或者,参考一下,非原本的解读
引用
Ruby on Rails官方博客发布的信息,Josh Peek加入了Rails的核心开发团队。Josh Peek正在开发的一个项目是让Rails框架变成线程安全的版本,该项目参加了今年的Google Summer Of Code大赛。

DHH宣布将在Rails 2.2版本当中合并Josh Peek的关于Rails线程安全的项目工作成果,这意味者Rails下一个版本,即2.2版本将支持多线程方式运行Rails。

我们知道,截止Rails 2.1版本,Rails仍然是以单进程内单线程方式运行,如果Rails改为单进程内多线程方式运行,会带来什么好处呢?

1、节省物理内存
由于多个线程在一个进程内可以共享内存空间地址,可以节省大量物理内存空间地址。

2、可以并发响应更多请求
一个进程内多个线程的调度可以由Mongrel等支持多线程的Ruby应用服务器管理,因此可以根据请求负载,创建更多线程响应请求,提高并发处理能力

但是以多线程方式运行Rails,并非革命性的进步,多线程也会带来很多问题:

1、ruby进程的GC过程会阻塞进程内所有线程的运行,GC比多进程方式带来更大的影响

2、多线程可以共享进程内资源,可能会导致程序员滥用多线程造成多个线程资源争用问题

3、多线程内任何一个线程的问题都可能影响整个进程的稳定运行。


但是多线程的Rails对于JRuby无疑是一个天大的好消息!由于JVM本身就是支持内核多线程的,因此多线程的Rails运行在JRuby上面是一个天然的绝配,不但可以大幅度减少JRuby的内存消耗,而且可以切实有效提供JRuby的并发处理性能。

总之,Rails 2.2支持多线程将为我们打开Rails的另外一扇门。


也就是说,作为web服务,没有多线程,我们多进程并发,不共享物理内存一直也一样用。

这里还有一段肉饼老大的论述,偷过来帮助消化

肉饼 写道

amonlei  写道
rails2.2支持线程安全了,看了一下官方文档,发现有问题,因为rails的action与view一般都是采用实例变量进行传值的。问题出来了:
1. 如果rails的controller采用类似java的单例模式,实例变量就会相互污染
2. 如果rails采用每个请求生成一个controller实例,那这部分的线程安全意义不大了
我估计采用的是2.,这样整个rails就不用加载多个实例了,不能采用单例的根源还是因为上面说说的采用类实例变量进行传值的机制导致的,各位大牛如何看待?



controller一向都是每个请求过来创建的,本身就是线程安全的。过去ActiveRecord是单例的,线程不安全,不过2.2改了一些底层实现,尽管现在还是单例,但是已经上线程安全的了。

不过不用多线程Rails的主要原因不在Rails框架本身,而在于Web应用本身没有必要多线程。Rails支持多线程只是给你多了一个option而已。


关于伪线程有jack老大的讨论也不错Ruby 线程

读完这些乱七八糟的东西以后,如果更晕了,那么我的目的就达到了,如果,没有呢,那我们继续探讨。

Rails内置缓存引擎与线程安全
曹力 写道

升级到Rails 2.1之后,使用Rails内置的缓存之后,发现使用mem_cache_store总是报错,于是干脆研究了Rails内置缓存引擎的代码。阅读的结果发现,Rails的内置引擎只应该应用于进程模式,尤其是mem_cache_store,因为mem_cache_store是每进程建立一个到 memcached的链接,即便是读取,也需要写入套接字,所以为了同步,必须使用锁。因此即使在读取缓存的时候,也会出现争用的情况。 mem_cache_store也必须像Rails2.2中的ActiveRecord一样实现一个到memcached的线程池,或者使用异步链接,否则是发挥不出memcached的效率的。

我研究了另外几个cache_store,

    * memory_store则根本连锁机制都没有,但对应有个多线程的synchronized_memory_store,使用了Monitor;
    * drb_store没有用过,可能Drb本身有一些同步机制,但估计也可能会出现与mem_cache_store一样的问题;
    * file_store应该是在多线程中应该比较理想的,因为使用了文件系统自身的同步机制,使用了File.atomic_write,无论是多线程还是多进程都能共享同一个file_store。


Ruby的memcache-client

到了缓存了,还没有说到 current user的问题或者,再开一头杂烩。
0
0
分享到:
评论
2 楼 helloqidi 2012-02-27  
非常感谢整理的这些资料,谢谢!
1 楼 cxh116 2011-08-04  
rails3现在还是单进程的吗?

相关推荐

    Ruby On Rails中文教材(PDF)

    PDF文档通常包含详细的教程、实例代码和可能的练习题,旨在帮助学习者全面了解和掌握Ruby on Rails的核心概念和技术。 在Rails框架中,关键知识点包括: 1. **Ruby基础知识**:首先,理解Ruby语言的基本语法和特性...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    通过以上介绍,我们不仅了解了Rails的基础知识,还深入探讨了其核心组件——Active Record的相关概念和技术细节。这些内容对于初学者来说是非常宝贵的入门资料,同时也是进一步学习和实践的基石。随着对Rails的深入...

    Ruby on Rails Tutorial

    在这个全球互联的世界中,计算机编程和 Web 应用程序开发都在迅猛发展,我很期待能为中国的开发者提供 Ruby on Rails 培训。学习英语这门世界语言是很重要的,但先通过母语学习往往会更有效果。正因为这样,当看到 ...

    ruby on rails 101

    本书由Peter Marklund编写,包含了五天课程的演示文稿和相关资料,覆盖了从安装到实际应用开发的所有关键知识点。 #### 一、Ruby on Rails 概览 ##### Kung-Fu? 引用自Nathan Torkington的话:“使用Ruby on Rails...

    ruby on rails最新版

    标签中的“on rails最新版”和“ruby”进一步强调了这个压缩包与Ruby on Rails框架的最新版本有关。Ruby是一种面向对象的动态编程语言,它以其简洁、优雅的语法深受开发者喜爱,而Ruby on Rails则是Ruby在Web开发...

    Ruby+for+Rails

    通过阅读"Ruby for Rails.pdf"和"Ruby on Rails 初体验.ppt",你可以深入了解Ruby on Rails的各个方面,包括其哲学、核心概念以及如何构建实际的Web应用程序。随着对Rails的理解加深,你将能够高效地开发出功能丰富...

    Ruby for Rails

    第一部分讲述Ruby和Rails的编程环境。第二部分和第三部分与 Rails紧密联系,着重对Ruby这门语言进行详细介绍;所采用的Rails应用示例,既说明了Ruby的特性,也给出了有关Rails的重要信息。第四部分讲述了如何应用第...

    Ruby on Rails中文指南

    Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在提升开发效率和代码的可读性。Rails以其“约定优于配置”的设计理念,以及“DRY(Don't Repeat ...

    ruby on rails 开发环境包(ruby1.8.7,rails2.2.3)

    然而,值得注意的是,随着时间的推移,Ruby和Rails都有了显著的发展,最新的版本提供了更多的特性和安全性改进。如果可能,建议升级到更现代的版本,以利用最新的技术和最佳实践。但是,如果你正在维护一个老项目或...

    ruby on rails 学习资料

    "ruby on rails 学习资料pdf"可能是综合性的学习指南,包含了从初学者到进阶者的各种主题,包括Rails的安装和配置、模型关系、控制器逻辑、视图渲染、部署到生产环境等。 "ruby on rails环境搭建.doc"会详细指导你...

    Ruby on Rails实践

    总的来说,Ruby on Rails实践涉及的知识点包括但不限于:Ruby语言基础、Rails框架结构、MVC模式、ActiveRecord、路由、测试驱动开发、插件和gem使用、以及部署策略。通过学习和实践,开发者能够快速构建功能丰富的...

    ruby on rails api

    Ruby on Rails(简称Rails)是一种基于Ruby编程语言的开源Web应用程序框架,专为敏捷开发而设计,强调简洁的代码和“约定优于配置”的原则。它主要用于构建数据驱动的Web应用,借助于MVC(Model-View-Controller)...

    ruby on rails(开发文档)

    Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,极大地简化了Web应用的开发过程。Rails的哲学是“约定优于配置”,鼓励开发者遵循一套标准的...

    Ruby on Rails入门经典代码

    通过学习和实践压缩包中的"Ruby on Rails入门经典代码",新手不仅可以了解Rails的基本概念,还能掌握实际项目中的应用技巧,逐步成长为一名熟练的Rails开发者。记得不断探索、实践和学习新的Rails知识,以适应不断...

    ruby on rails 3 tutorial.pdf

    Ruby语言以其优雅的语法和面向对象特性著称,而Rails则将这些优点进一步发扬光大,使得Web开发变得更加高效和愉快。在本书中,作者将引领你逐步了解和掌握Rails的核心概念和技术。 首先,你需要了解的是Rails的安装...

    rails2.3.8 && ruby1.8.7

    标题中的"rails2.3.8 && ruby1.8.7"指的是Ruby on Rails框架的2.3.8版本和Ruby编程语言的1.8.7版本。...开发者只需下载并解压此包,然后按照Ruby和Rails的安装指南进行配置,即可开始进行Rails应用的开发工作。

Global site tag (gtag.js) - Google Analytics