О каких проблемах параллелизма / взаимоблокировки следует знать в коде Rails? - PullRequest
0 голосов
/ 01 сентября 2009

Я только что пришел к выводу о взаимоблокировках, а именно о том, что они из себя представляют, и я обеспокоен этой проблемой, затрагивающей мой код Rails.

Существуют ли какие-либо конкретные проблемы тупиковой ситуации, на которые следует обратить внимание при разработке приложения Rails?

Вы когда-нибудь сталкивались с тупиком в вашем коде Rails - или это вообще возможно?

(я не имею в виду взаимоблокировки базы данных - только взаимоблокировки приложений).

Ответы [ 2 ]

2 голосов
/ 01 сентября 2009

Deadlock подразумевает конкуренцию за ресурс ввода-вывода, поэтому он чаще всего подходит для баз данных. Если вы неправильно блокируете и запрашиваете ресурсы и явно используете потоки, то да, вы должны быть обеспокоены.

Однако конкретные шаги, предпринимаемые для устранения любых проблем, зависят от типа ввода / вывода, к которому вы обращаетесь.

0 голосов
/ 15 сентября 2010

В 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

...