È possibile in qualche modo utilizzare le raccolte parallele di Scala per parallelizzare uno Iterator
senza valutandolo completamente prima?iteratore parallelo in Scala
Qui sto parlando di parallelizzare le trasformazioni funzionali su un Iterator
, ovvero map
e flatMap
. Penso che ciò richieda in anticipo alcuni elementi dello Iterator
, e quindi il calcolo di più, una volta che alcuni vengono consumati tramite next
.
Tutto quello che riuscivo a trovare richiederebbe che l'iteratore fosse convertito in un Iterable
o un Stream
nella migliore delle ipotesi. Il Stream
viene quindi completamente valutato quando si chiama .par
su di esso.
Accolgo anche proposte di implementazione se questo non è facilmente disponibile. Le implementazioni devono supportare il parallelo map
e flatMap
.
La risposta è probabilmente no ma puoi dire qualcosa in più su ciò che vuoi da questo? In particolare, quando dovrebbe iniziare il calcolo, dopo aver creato l'iteratore o dopo aver chiamato qualcosa che impone la valutazione? –
@RexKerr Sembra una scelta di design; ma facendolo iniziare alla prima richiesta rende la prima richiesta in qualche modo speciale. Attualmente sto cercando di implementare qualcosa di simile e ho scelto di iniziare subito a correre e memorizzare i risultati successivi 'n'. Una volta che si è consumato, computo una sostituzione. – ziggystar