2010-06-25 3 views
3

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

Спасибо.

ответ

4

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

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

Вы также можете иметь возможность создать экземпляр действительного транзакции в вашем потоке с помощью withTransaction link text:

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

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

1

<plug>

Как это происходит, я в настоящее время рассматривает главу 17 second edition of Groovy in Action прямо сейчас (как у меня есть документ Слово открыт, и я редактирую его всякий раз, когда я не разместить здесь). В этой главе рассказывается о параллелизме в Groovy в целом - в нем явно не упоминается Grails, но я сомневаюсь, что у него есть влияние на то, что вы, возможно, захотите использовать. Глава 17 уже доступна в раннем доступе «MEAP» издание ...

</plug>

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