在Rails代码中应该注意哪些并发/死锁问题?

时间:2009-09-01 06:49:25

标签: ruby-on-rails ruby concurrency multithreading deadlock

我刚刚意识到死锁 - 即它们是什么 - 我担心这个问题会影响我的Rails代码。

在开发Rails应用程序时是否需要注意特定的死锁问题?

您是否曾在Rails代码中遇到过死锁 - 或者甚至是可能的?

(我不是指数据库死锁 - 只是应用程序死锁)。

2 个答案:

答案 0 :(得分:2)

死锁意味着竞争I / O资源,这就是为什么它最常出现在数据库中的原因。如果您不正确地锁定和请求资源并且您明确使用线程,那么您需要关注。

但是,缓解任何问题的具体步骤取决于您访问的I / O类型。

答案 1 :(得分:0)

Rails没有很多操作系统级死锁问题,因为Ruby 1.8是单线程的,即使在1.9中也是锁定的

关注点主要在数据库中。 Rails有一个双重打击,其中ActiveRecord从数据库中抽象出来,像FK这样的东西和约束被推送到应用程序级验证(before_save,validates_ *等),结果不鼓励开发人员考虑数据库死锁情况。

如果你正在使用MYSQl,你可以在这里阅读有关innodb的问题区域(Rails中的默认值)http://dev.mysql.com/doc/refman/5.1/en/innodb-transaction-model.html