Fin*_*ive 6 concurrency groovy gpars
我有一个大型的处理任务,我相信它已经成熟,可以提高并发性和并行性.
我看了一下GPars文档,发现它们很混乱,所以我希望这里的人能提供帮助.
我想要并行执行的第一项任务目前看起来像这样:
def providerOneProgrammes = providerOneProgrammeService.getProgrammes(timeWindow)
def providerTwoProgrammes = providerTwoProgrammeService.getProgrammes(timeWindow)
Run Code Online (Sandbox Code Playgroud)
两者都返回一个对象列表,两者都可以并行运行.
我想一起执行它们然后在处理返回列表之前等待它们完成(然后我会查找列表之间的匹配但我稍后会讨论).
谢谢
拉克什
ata*_*lor 14
利用GPars的最简单方法是使用callAsync.这是一个简单的例子:
@Grab(group='org.codehaus.gpars', module='gpars', version='1.0-beta-2')
import groovyx.gpars.GParsPool
def providerOneProgrammeService(timeWindow) {
println "p1 starts"
Thread.sleep(4000)
println "p1 still going"
Thread.sleep(4000)
println "p1 ends"
return "p1 return value"
}
def providerTwoProgrammeService(timeWindow) {
println "p2 starts"
Thread.sleep(5000)
println "p2 still going"
Thread.sleep(5000)
println "p2 still going"
Thread.sleep(5000)
println "p2 ends"
return "p2 return value"
}
def results = []
GParsPool.withPool {
results << this.&providerOneProgrammeService.callAsync("arg1")
results << this.&providerTwoProgrammeService.callAsync("arg2")
}
println "done ${results*.get()}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5714 次 |
| 最近记录: |