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并发连接),但它没有提高我的性能。
发布于 2013-03-20 01:59:57
默认情况下,Rails是单线程的,这很大程度上是因为MRI ruby对线程并发的支持很差。您可以尝试通过以下方式将Rails置于多线程模式:
config.thread_safe!一般来说,如果你需要在Rails中启动一个长时间运行的进程,你可能希望在单独的后台进程中使用DelayedJob、Resque或Beanstalk来完成大部分工作。其他线程多久才能获得结果将取决于完成所需的时间,以及整个批量插入是在单个事务中,还是在多个较小的事务中。
发布于 2013-03-20 01:54:46
我相信它默认是串行线程的(一直处理一个请求,然后再处理另一个请求)。要启用多线程,请像您一样指定池大小,然后运行
config.threadsafe!在您的environment.rb类型文件中。
我不认为这会影响您所描述的场景,不过,听起来更像是MySql在继续自己的插入之前“等待”另一个提交完成。
https://stackoverflow.com/questions/15506801
复制相似问题