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?
risposta
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.
aggiungerei chiusure. Rende davvero molte cose più facili. –
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
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)
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
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 Deve venire dalla lista; piuttosto dovremmo essere attivamente alla ricerca di modi per sfruttare i molteplici core CPU disponibili sui computer moderni. –
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.
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
@cHao @Zan domanda modificata per affrontare più da vicino il problema. :) –