我找到了有关如何使用withPool
的示例。它说我只需要在Groovy的方法(如Parallel
)中添加collect, find, each
一词,并将其放入withPool
中,它就会并行执行代码。
import static groovyx.gpars.GParsPool.withPool
list = 1..1000000
withPool{
squares = list.collectParallel { it * it}
}
println squares
有没有机会检查它是否真的平行?
我用相同的代码尝试了基准测试,但是顺序方式
而平行的方式要慢得多。
最佳答案
不知道您的意思是“但顺序和并行方式要慢得多” ...
这将并行运行,但是对于这个简单的示例,将作业触发到其他处理器并处理结果的顺序所产生的额外费用可能要比仅仅乘以一些数字花费的时间更长。
对于一个简单的示例,它可以正常工作,您可以执行以下操作:
import static groovyx.gpars.GParsPool.withPool
list = [ 2, 2, 2, 2, 2 ]
withPool{
result = list.collectParallel {
Thread.sleep( it * 1000 )
it
}
}
println result
因此结果应该是
[2,2,2,2,2]
,但是collectParallel
应该在少于串行collect
版本期望的10秒内完成显然,这取决于您拥有多个核心;-)