Как сделать Scala писать многопоточные программы проще, чем в Java? Что может сделать Scala (чего не может Java), чтобы облегчить использование нескольких процессоров?
Нет ничего Scala, что не делает Java. Это было бы глупо. Scala работает на той же JVM, что и Java.
Что делает Scala , так это упрощает написание, упрощает рассуждение и упрощает отладку многопоточной программы.
Хорошие стороны Scala для параллелизма - это его фокусировка на неизменяемых объектах, передаче сообщений и его субъектах.
Это дает вам потокобезопасные данные, доступные только для чтения, простые способы передачи этих данных в другие потоки и простое использование пула потоков.
Правила параллелизма
1 избегайте этого, если можете
2 ничего не делитесь, если можете
3 совместно использовать неизменяемые объекты, если можете
4 будьте очень осторожны (и повезло)
Для правила 2 Scala помогает, предоставляя из коробки прекрасно интегрированную библиотеку передачи сообщений в виде акторов.
Для правила 3 Scala помогает сделать все неизменным по умолчанию.
Для правила 4 гибкий синтаксис Scala позволяет создавать внутренние DSL, что упрощает и упрощает лаконичное выражение того, что вам нужно. т.е. меньше места для сюрпризов (если все сделано хорошо)
Если взять Akka в качестве основы для параллельных (и распределенных) вычислений, можно утверждать, что единственная разница - это обычные вещи, которые отличает Scala от Java, поскольку Akka имеет привязки как Java, так и Scala для всех его возможностей.