2010-06-25 49 views
3

我有一個Grails應用程序,我需要觸發一個cpu密集型進程。我正在考慮創建一個服務,該服務會產生多個執行相同計算的線程,但隨機數據將在稍後進行比較。這樣做安全嗎?任何建議/經驗?Grails和多線程進程

謝謝。

回答

4

您可能會遇到的最大問題是您創建的任何線程都不會自動將hibernate會話附加到它們。因此,如果您需要對自己的域名進行任何操作,則需要手動連線。我前段時間研究過它,這是可行的,但我最終採取了另一種方式,所以沒有一個完整的例子來談論。

我認爲那裏也有一些插件,比如Background Thread插件,它會爲你產生一個線程並附加適當的休眠內容。我不確定插件是否仍然保留,因此可能無法在1.3或更高版本上運行。

您可能還可以通過使用withTransaction link text實例在你的線程有效的事務:

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

注意,每個線程會再有它自己的事務,並表示不會參與同一個事務作爲其他線程(所以如果一個線程失敗,你將無法將所有東西都回滾)。

1

<plug>

當它發生時,我正在審查second edition of Groovy in Action的第17章,現在(在我的Word文檔打開,我編輯它,每當我沒有張貼在這裏)。這一章主要討論Groovy中的併發 - 它沒有明確提到Grails,但我懷疑它會影響你想要使用的東西。第17章是在早期訪問「MEAP」版已經上市...

</plug>

反正我沒有併發在Groovy自己的直接經驗,但它聽起來像是你應該看GPars