Параллельно с 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 версия

Очевидно, это зависит от того, что у вас более одного ядра;-)

Другие вопросы по тегам