Как scala может создавать многопоточные программы проще, чем в java? Что может сделать scala (что java не может), чтобы облегчить использование нескольких процессоров?Какие преимущества у Scala для Java для параллельного программирования?
ответ
ничего Scala делает то, что Java не делает. Это было бы глупо. Scala работает на той же JVM, что и в Java.
Что делает Scala Это облегчает запись, проще рассуждать и проще отлаживать многопоточную программу.
Хорошие битки для параллелизма - это сосредоточение внимания на непреложных объектах, передаче сообщений и их Актерах.
Это дает потокобезопасные данные только для чтения, простые способы передачи этих данных другим потокам и простое использование пула потоков.
Я бы добавил к нему закрытие. Это действительно облегчает многое. –
Я бы добавил, что разграниченные продолжения действительно меняют игровое поле для написания параллельных программ. Надеюсь, удивительная поддержка библиотеки появится через несколько месяцев. – jsuereth
Правила параллельности являются
1 избежать, если вы можете
2 Доля ничего, если вы можете
3 доли неизменные объекты, если вы можете
4 быть очень осторожным (и lucky)
Для правила 2 Scala помогает, предоставляя красиво интегрированную библиотеку передачи сообщений из коробки в форме актеров.
Для правила 3 Скала помогает сделать все неизменным по умолчанию.
Для правила 4 Гибкий синтаксис Scala позволяет создавать внутренние DSL, что делает его проще и менее многословным, чтобы выразить то, что вам нужно. т. е. меньше места для сюрпризов (если все сделано хорошо)
Я думаю, что № 1 все труднее делать. Я бы сказал, что с использованием фреймворка, например. map-reduce или некоторая библиотека fork-join, может помочь вам писать параллельные программы, не испытывая при этом одновременной работы. – jsuereth
Согласен. Это определенно требует тщательного изучения ваших потребностей и выбора шаблонов параллелизма, которые соответствуют этим требованиям. А затем используйте отлаженную библиотеку/фреймворк, которые их реализуют. –
# 1 Нужно прийти из списка; скорее мы должны активно искать способы использования множества ядер процессора, доступных на современных компьютерах. –
Если вы берете Akka в качестве основы для параллельных (и распределенных) вычислений, можно утверждать, что единственное различие - это обычный материал, который отличает Scala от Java, поскольку Akka имеет как Java и привязки Scala для всех своих объектов.
Java может делать все, что может сделать Scala, и наоборот. Они оба работают в JVM, и они оба завершают Turing, поэтому по определению либо можно делать то же самое, что и другое. Разница в том, что проще или более естественно на одном языке, чем на другом. – cHao
@cHao @Zan отредактировал вопрос, чтобы более внимательно рассмотреть проблему. :) –