2010-06-25 51 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