четверг, 14 июля 2011 г.

Re: EventMachine + ActiveRecord

Работать синхронно с БД через EM нет никакого смысла. "Задача для EM" это когда тебе нужно эффективно работать с БД (т.е. не тратить время на пустое ожидание, а постоянно молотить процессором) из одного процесса. В руби 1.9 + mysql2 AR прекрасно работает с EM без всяких хаков через файберы. Однако если весь ваш процесс это вот один такой луп, то никакой эффективности здесь, конечно, не нужно.

Гонок как таковых с ивент-лупами как раз не бывает, "в двух таймерах потребуется изменить одну и ту же запись" это твоя логика, внешняя относительно руби, никто не мешает делать очереди из операций, чтобы вещи, которые не должны выполняться параллельно не выполнялись параллельно. Но, повторюсь, здесь, кажется, ничего этого не нужно, а просто блокируемо обращаться к БД )

On Jul 14, 2011, at 4:16 PM, a.ognevsky wrote:

Ага, огромное спасибо, теперь понял. Тогда оставлю как есть и буду надеяться, что делать все это асинхронным не понадобится никогда, потому что хаки в AR — это самое малое, что меня будет ждать.

--
Andrey Ognevsky

On Thursday, July 14, 2011 at 3:14 PM, Max Lapshin wrote:

2011/7/14 a.ognevsky <a.ognevsky@gmail.com>:
А что в приведенном примере и в случае асинхронности будет, когда в двух
таймерах потребуется изменить одну и ту же запись, например?
То есть один таймер будет каждую минуту добавлять деньги, а в ту же таблицу
другой таймер каждую секунду будет добавлять какую-нибудь карму?

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

У тебя всё будет выполняться по очереди. В случае если ты будешь
асинхронно работать с БД, то там уже могут
начаться и гонки, потому что БД многопоточная.

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ

Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru


--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror2ru@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-unsubscribe@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

Комментариев нет:

Отправить комментарий