14

Come può scala rendere più semplice la scrittura di programmi multi-thread rispetto a java? Cosa può fare scala (che java non può) per facilitare l'utilizzo di più processori?Quali vantaggi ha Scala su Java per la programmazione simultanea?

+4

Java può fare qualsiasi cosa che Scala può fare e viceversa. Entrambi corrono nella JVM e sono entrambi completi di Turing, quindi per definizione uno può fare le stesse cose dell'altro. La differenza è ciò che è più facile o più naturale in una lingua rispetto all'altra. – cHao

+0

@cHao @Zan domanda modificata per affrontare più da vicino il problema. :) –

risposta

6

C'è niente Scala non fa quello Java. Sarebbe sciocco. Scala viene eseguito sulla stessa JVM utilizzata da Java.

Cosa Scala fa do è semplifica la scrittura, rende più semplice la spiegazione e facilita il debug di un programma multi-thread.

I buoni elementi di Scala per la concorrenza sono il focus su oggetti immutabili, il suo passaggio di messaggi e i suoi attori.

Fornisce dati di sola lettura e thread-safe, modi semplici per passare tali dati ad altri thread e un facile utilizzo di un pool di thread.

+2

aggiungerei chiusure. Rende davvero molte cose più facili. –

+1

Aggiungo anche che le continuazioni delimitate cambiano davvero il campo di gioco per scrivere programmi concorrenti. Speriamo che l'incredibile supporto per la libreria compaia tra qualche mese. – jsuereth

13

Le regole per la concorrenza sono

1 evitarlo se potete

2 quota di nulla se si può oggetti

3 quota di immutabili se si può

4 essere molto attenti (e fortunato)

Per la regola 2 Scala aiuta fornendo una libreria di passaggio dei messaggi ben integrata, fuori dagli schemi, sotto forma di attori.

Per la regola 3 Scala consente di rendere tutto immutabile per impostazione predefinita.

Per la regola 4 la sintassi flessibile di Scala consente la creazione di DSL interne, rendendo più facile e meno prolisso esprimere ciò che è necessario in modo conscio. vale a dire meno posto per sorprese (se fatto bene)

+1

Penso che il numero 1 stia diventando sempre più difficile da fare. Direi che l'utilizzo di un framework, ad es. map-reduce o alcune librerie fork-join, possono aiutarti a scrivere programmi concorrenti senza che si sentano concomitanti. – jsuereth

+0

Sono d'accordo. Vale sicuramente la pena esaminare attentamente i tuoi bisogni e selezionare i modelli di concorrenza che li soddisfano. E poi usa una libreria/framework debugata che li implementa. –

+1

# 1 Deve venire dalla lista; piuttosto dovremmo essere attivamente alla ricerca di modi per sfruttare i molteplici core CPU disponibili sui computer moderni. –

12

Se si prende Akka come base per il calcolo simultaneo (e distribuito), si potrebbe obiettare che l'unica differenza è la solita roba che distingue Scala da Java, poiché Akka ha sia Java che Java e gli attacchi Scala per tutte le sue strutture.