Грааль и многопоточный процесс - PullRequest
3 голосов
/ 25 июня 2010

У меня есть приложение Grails, и мне нужно запустить процесс, интенсивно использующий процессор. Я думаю о создании сервиса, который порождает несколько потоков, которые выполняют одни и те же вычисления, но со случайными данными, чтобы сравнить результаты позже. Насколько это безопасно? Любые рекомендации / опыт?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 26 июня 2010

Самая большая проблема, с которой вы, вероятно, столкнетесь, заключается в том, что к любым создаваемым вами потокам автоматически не присоединяется сеанс гибернации.Поэтому, если вам нужно что-то сделать с вашим доменом, вам нужно будет подключить его вручную.Я изучил это некоторое время назад, и это было выполнимо, но в итоге я пошел другим путем, поэтому у меня нет готового примера, чтобы поговорить.

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

Вы также можете создать экземпляр действительной транзакции в вашем потоке, используя withTransaction текст ссылки :

MyDomain.withTransaction { status ->
    // GORM stuff that needs a valid transaction
}

Обратите внимание, что тогда у каждого потока будет своя собственная транзакция, и что он не будет участвовать в той же транзакции, что и другие потоки (поэтому вы не сможете выполнить откатвсе вернулось, если один поток вышел из строя).

1 голос
/ 25 июня 2010

<plug>

Как это происходит, я сейчас пересматриваю главу 17 второго издания Groovy в действии прямо сейчас (как, например, у меня открыт документ Word, иЯ редактирую это всякий раз, когда я не публикую здесь).Эта глава посвящена параллелизму в Groovy в целом - в нем явно не упоминается Grails, но я сомневаюсь, что это оказывает значительное влияние на то, что вы, возможно, захотите использовать.Глава 17 уже доступна в раннем издании «MEAP» ...

</plug>

В любом случае, у меня нет непосредственного опыта параллелизма в Groovy, но это звучиткак вы должны смотреть на GPars .

...