首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby on Rails并发性

问Ruby on Rails并发性
EN

Stack Overflow用户
提问于 2013-03-20 01:48:33
回答 2查看 680关注 0票数 0

Ruby on Rails是单线程应用程序吗?我觉得它不支持任何并发,特别是当我在做mysql查询的时候。

我使用ruby 1.8.7和rails 2.3.11和Phusion Passenger (都是由Bluehost提供的)。另外,这也是我的开发服务器所使用的

代码语言:javascript
复制
[2013-03-19 10:42:00] INFO  WEBrick 1.3.1
[2013-03-19 10:42:00] INFO  ruby 1.8.7 (2012-02-08) [universal-darwin12.0]
[2013-03-19 10:42:00] INFO  WEBrick::HTTPServer#start: pid=23034 port=3000

下面的场景严重地使我的应用程序无法使用:

步骤1:批量插入(大量数据) <--当事务提交数据时,这会卡住。

步骤2:从不同的插入表中查询,获取JSON对象。

我可以从控制台上看出这是怎么回事。我尝试增加“池”(我相信这会增加mysql并发连接),但它没有提高我的性能。

EN

回答 2

Stack Overflow用户

发布于 2013-03-20 01:59:57

默认情况下,Rails是单线程的,这很大程度上是因为MRI ruby对线程并发的支持很差。您可以尝试通过以下方式将Rails置于多线程模式:

代码语言:javascript
复制
config.thread_safe!

一般来说,如果你需要在Rails中启动一个长时间运行的进程,你可能希望在单独的后台进程中使用DelayedJob、Resque或Beanstalk来完成大部分工作。其他线程多久才能获得结果将取决于完成所需的时间,以及整个批量插入是在单个事务中,还是在多个较小的事务中。

票数 3
EN

Stack Overflow用户

发布于 2013-03-20 01:54:46

我相信它默认是串行线程的(一直处理一个请求,然后再处理另一个请求)。要启用多线程,请像您一样指定池大小,然后运行

代码语言:javascript
复制
config.threadsafe!

在您的environment.rb类型文件中。

我不认为这会影响您所描述的场景,不过,听起来更像是MySql在继续自己的插入之前“等待”另一个提交完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15506801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档