6

私には、並行性と並列性によってより効率的になるために熟していると私が信じる大きな処理タスクがあります。

GParsのドキュメントを見て、かなり混乱していることがわかったので、ここの人々が助けてくれることを願っています。

私が並行して実行したい最初のタスクは、現在次のようになっています。

def providerOneProgrammes = providerOneProgrammeService.getProgrammes(timeWindow)
def providerTwoProgrammes = providerTwoProgrammeService.getProgrammes(timeWindow)

どちらもオブジェクトのリストを返し、両方を並行して実行できます。

それらを一緒に実行し、それらが終了するのを待ってから、リターンリストを処理したいと思います(リスト間の一致を探しますが、後でそれについて説明します)。

ありがとう

Rakesh

4

1 に答える 1

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()}"
于 2012-07-17T22:29:37.430 に答える