我刚刚意识到死锁 - 即它们是什么 - 我担心这个问题会影响我的 Rails 代码。
在开发 Rails 应用程序时,是否有任何特定的死锁问题需要注意?
你有没有在你的 Rails 代码中遇到过死锁——或者这可能吗?
(我指的不是数据库死锁——只是应用程序死锁)。
我刚刚意识到死锁 - 即它们是什么 - 我担心这个问题会影响我的 Rails 代码。
在开发 Rails 应用程序时,是否有任何特定的死锁问题需要注意?
你有没有在你的 Rails 代码中遇到过死锁——或者这可能吗?
(我指的不是数据库死锁——只是应用程序死锁)。
死锁意味着对 I/O 资源的竞争,这就是为什么它最常出现在数据库中的原因。如果您不正确地锁定和请求资源并且您明确使用线程,那么您需要关注。
但是,缓解任何问题的具体步骤取决于您访问的 I/O 类型。
Rails 没有太多操作系统级别的死锁问题,因为 Ruby 1.8 是单线程的,即使在 1.9 中也是锁定的
关注点主要在数据库中。Rails 有双重打击,ActiveRecord 从数据库中抽象出来,并将 FK 和约束之类的东西推入应用程序级别的验证(before_save、validates_* 等),结果阻止了开发人员考虑 DB 死锁情况。
如果您使用的是 MYSQl,您可以在此处http://dev.mysql.com/doc/refman/5.1/en/innodb-transaction-model.html阅读有关 innodb 的问题区域(Rails 中的默认设置)