2015-03-11 20 views
6

Leggendo il codice sorgente scala per scala.concurrent.Future e scala.concurrent.impl.Future, sembra che ogni composizione futura tramite map invii una nuova attività per un executor. Presumo che questo in genere attivi un interruttore di contesto per il thread corrente e/o un'assegnazione di un thread per il lavoro.Futures e thread Scala

Considerando che i flussi di funzione devono passare attorno a Futures tra di loro per agire sui risultati di Futures senza bloccare (o senza scavare negli spaghetti callback), questo paradigma "reattivo" non è molto caro in pratica, quando il codice è ben scritto in modo modulare dove ogni funzione fa qualcosa di piccolo e passa ad altri?

+0

Sì sì ... ma si suppone che sia "reattivo" e non necessariamente "ottimizzato per le prestazioni". –

+3

L'approccio adottato dalla libreria standard in questo senso è una decisione di progettazione e contrasta con l'implementazione di future su Twitter, che è ottimizzata per l'affinità del thread - si veda ad es. [questo post Finaglers] (https://groups.google.com/d/msg/finaglers/yWOr7-7CmPw/TBsJenqynQQJ) per alcune discussioni. –

+0

Forse @TravisBrown lo avrebbe tagliato/incollato nella casella "La tua risposta". Modulo i suoi standard sono incredibilmente alti. Ma il suo commento è un trattino più lungo del precedente. –

risposta

2

Dipende dal contesto di esecuzione. Quindi puoi scegliere la strategia.

L'esecutore può anche solo eseguire il thread chiamante, mantenendo le chiamate sulla mappa sullo stesso thread. Puoi passare la tua strategia passando esplicitamente il contesto di esecuzione o utilizzare l'implicito.

Vorrei innanzitutto testare il fork/join pool predefinito, registrando quale thread è stato utilizzato. Le versioni più recenti di Afaik a volte utilizzano il thread di invio. Tuttavia, non so se viene usato/applicato per i callback scala scala.

+0

Cura di fornire un esempio di derivazione sicura di un simile esecutore ??! _ "registrare quale thread è stato usato" _ potrebbe anche essere bello se fosse semplice da realizzare o solo una curiosità .... – matanster