Recentemente ho letto spesso che, dato che la tendenza è quella di costruire processori con più core, sarà sempre più importante avere linguaggi di programmazione che supportano la programmazione simultanea e parallela per sfruttare al meglio il parallelismo offerto da questi processori (vedi ad esempio questo video per alcuni sfondo.).
A tale riguardo, alcuni paradigmi o modelli di programmazione sono considerati adatti per scrivere software concorrente solido:
- Linguaggi di programmazione funzionale, ad es. Haskell, Scala, ecc.
- Il modello attore: Erlang, ma disponibile anche per Scala / Java (Akka), C ++ (Theron, Casablanca, ...) e altri linguaggi di programmazione.
Le mie domande:
- Qual è lo stato dell'arte riguardante lo sviluppo di applicazioni concorrenti (ad esempio utilizzando multi-threading) utilizzando i linguaggi / i modelli sopra indicati? Questa zona è ancora in fase di studio o esistono già pratiche consolidate?
- Sarà più complesso programmare applicazioni con un livello più alto di concorrenza, o si tratta solo di imparare nuovi paradigmi e pratiche?
- In che modo le prestazioni del software altamente concorrente si confrontano con le prestazioni di un software più tradizionale quando vengono eseguite su processori core multipli?
- Ad esempio, qualcuno ha implementato un'applicazione desktop usando C ++ / Theron o Java / Akka? C'è stato un aumento delle prestazioni su un processore multi core a causa del parallelismo più elevato?
Modifica
NOTA che non sto chiedendo le tue opinioni o il tuo dibattito ma esperienze o informazioni concrete. Ad esempio, qualcuno ha scritto un programma Scala o Haskell, lo ha compilato con compilatori all'avanguardia e
- Eseguilo su un Intel Core i3 e misurava una certa prestazione (ad esempio 10 secondi su determinati dati di input).
- Esegui lo stesso bytecode o binario su un Intel Core i5 e osserva un aumento delle prestazioni (ad esempio 6 secondi di tempo di esecuzione) a causa del calcolo parallelo delle sottoespressioni che è possibile nel codice funzionale?
EDIT 2
RIASSUNTIVA. Fino ad ora realizzare processori più veloci significava aumentare la velocità di clock e non erano necessari cambiamenti nel paradigma di programmazione. Negli ultimi anni fare un processore più veloce ha comportato l'aggiunta di più core, ma ciò richiede che scriviamo software in modo diverso. La mia domanda è se gli sviluppatori software stanno iniziando a passare a nuovi paradigmi di programmazione e se questo sta portando il previsto aumento delle prestazioni su processori multi-core.