Это последовательная версия:
void f(long n) {
for (int i=1; i<n-1; i++) {
// do nothing
}
}
List result = []
(1..99999).each {
f(it)
result << it
}
Выполнение кода занимает несколько секунд.
void f(long n) {
for (int i=1; i<n-1; i++) {
// do nothing
}
}
withPool {
runForkJoin(1,99999) { a, b ->
List result = []
(a..b).each {
f(it)
result << it
}
return result
}
}
Код выше занимает несколько минут. Я еще не звонил ни forkOffChild()
, ни childrenResults()
. Я запускаю этот код в Windows и одноядерном процессоре с Intel Hyperthreading (2 логических процессора). Java Runtime.runtime.availableProcessors()
возвращает 2.
Я не понимаю, почему код, который использует runForkJoin
, намного медленнее, чем последовательный код (минуты против секунд).