`

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 Guides v2 - Ruby on Rails 4.2.5

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    Ruby on Rails Tutorial

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

    Ruby for Rails

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

    免费Ubuntu系统ruby on rails安装【保姆级教程】

    Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 Ubuntu系统ruby on rails安装 ...

    Ruby On Rails中文教材(PDF)

    Ruby On Rails中文教材(PDF)

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

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

    Ruby on Rails中文指南

    Ruby on Rails中文指南

    Ruby On Rails教程

    Ruby On Rails 官方教程,这本书讲解如何使用 Ruby on Rails 框架开发应用,以及如何把应用部署到生成环境。...这本书是《Ruby on Rails Tutorial, Third Edition》的简体中文版,由作者授权翻译和销售。

    ruby on rails社区网站开发源码

    ruby on rails社区网站开发源码

    ruby on rails api

    ruby on rails api方便查阅

    提升Ruby on Rails性能的几个解决方案

    Ruby On Rails 框架自它提出之日起就受到广泛关注,在“不要重复自己”,“约定优于配置”等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率。 ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可...

    ruby on rails对mongodb的操作

    ruby on rails对mongodb的操作ruby on rails对mongodb的操作ruby on rails对mongodb的操作ruby on rails对mongodb的操作

    《Ruby on Rails Web开发学习实录》

    全书共分17章,主要内容包括:搭建ruby on rails开发平台、ruby语言的基础知识(像控制语句、面向对象、数组和块等)、文件处理、数据库持久化、rails控制器和路由、视图模板以及发送邮件和ajax等。 《ruby on rails ...

    Ruby on rails tutorial中文版(第二版)

    我读过很多 Rails 相关的书,但是这本真正让我入门了。书里的一切都很符合“Rails 之道”,我以前觉得这个道很不自然,但是读完这本书,感觉却是自然无比。本书也是唯一一本自始至终都是用测试驱动开发理念的 Rails ...

    Ruby+for+Rails

    Ruby 的基本知识,...安装 ruby ,rails...mysql 数据库...用 rails 实现的是一个简单的网上书籍管理程序 ...

    ruby on rails 学习资料

    ruby on rails 学习资料pdf

Global site tag (gtag.js) - Google Analytics