Параллельно с withPool
Я нашел пример того, как использовать withPool
, Он говорит, что мне просто нужно добавить слово Parallel
к методам Groovy, как collect, find, each
положить его в withPool
и он выполняет код параллельно.
import static groovyx.gpars.GParsPool.withPool
list = 1..1000000
withPool{
squares = list.collectParallel { it * it}
}
println squares
Есть ли шанс проверить, действительно ли это параллельно?
Я пробовал бенчмарк-тест с тем же кодом, но последовательным способом
и параллельный путь был намного медленнее.
1 ответ
Не уверен, что вы подразумеваете под "но последовательный и параллельный путь был намного медленнее"...
Это будет выполняться параллельно, но в этом упрощенном примере дополнительная стоимость запуска заданий на другие процессоры и обработки порядка результатов, вероятно, займет больше времени, чем просто умножение некоторых чисел.
Для упрощенного примера, демонстрирующего его работу, вы можете сделать:
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
должно закончиться менее чем за 10 секунд, которые вы ожидаете с сериалом collect
версия
Очевидно, это зависит от того, что у вас более одного ядра;-)