Vector
не является специализированным для Double
, поэтому вы будете платить немалые потери производительности за его использование.Если вы выполняете простую операцию, вам, вероятно, лучше использовать массив на одном ядре, чем Vector
или другую общую коллекцию на всей машине (если у вас не более 12 ядер).Если вам все еще нужно распараллеливание, есть другие механизмы, которые вы можете использовать, например, scala.actors.Futures.future
для создания экземпляров, каждый из которых выполняет работу над частью диапазона:
val a = Array(1,2,3,4,5,6,7,8)
(0 to 4).map(_ * (a.length/4)).sliding(2).map(i => scala.actors.Futures.future {
var s = 0
var j = i(0)
while (j < i(1)) {
s += a(j)
j += 1
}
s
}).map(_()).sum // _() applies the future--blocks until it's done
Конечно, вам понадобитсяиспользовать это на гораздо более длинном массиве (и на машине с четырьмя ядрами) для распараллеливания, чтобы улучшить ситуацию.