0

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

我正在使用 ruby​​ 1.8.7 和 rails 2.3.11 和 Phusion Passenger(均由 Bluehost 提供)。另外,这就是我用于我的开发服务器的样子

[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 并发连接数),但它并没有提高我的性能。

4

2 回答 2

3

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

config.thread_safe!

这将是 Rails 4 中的默认设置。通常,如果您需要在 Rails 中启动一个长时间运行的进程,您可能希望使用诸如DelayedJobResqueBeanstalk之类的东西在单独的后台进程中完成大部分工作。结果多久可用于其他线程将取决于完成需要多长时间以及整个批量插入是在单个事务中还是在几个较小的事务中。

于 2013-03-19T17:59:57.493 回答
0

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

config.threadsafe!

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

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

于 2013-03-19T17:54:45.593 回答