Вопросы по Java и Scala и распараллеливанию - PullRequest
3 голосов
/ 11 апреля 2011

Итак, у меня есть пара вопросов о scala.

1) Будет ли создание нового проекта в scala более быстрым (с точки зрения производительности) или мне следует просто придерживаться обычной java?Проект, который я собираюсь унаследовать, уже написан на Java, но он может быть массово распараллелен.Кроме того, этот проект предназначен для академических целей, поэтому я немного волнуюсь, что это не очень хорошая идея.Я знаю, что сначала мне нужно будет запустить его у моего руководителя, но это всего лишь мысль.

2) Просто чтобы быть уверенным, я могу скомпилировать свой код scala на своем компьютере и выполнить «двоичные файлы» (скомпилированные).байт-код) в кластере, в котором установлена ​​JVM?

3) Если бы я должен был скомпилировать унаследованную Java-программу, она должна работать?И должно ли это быть быстрее?

(в кластере используется SGE)

Ответы [ 2 ]

6 голосов
/ 11 апреля 2011
  1. Это полностью зависит от того, сколько работы вы хотите потратить на распараллеливание вашего кода (и насколько параллелизуются алгоритмы). Scala делает это проще, но он работает только на JVM, и Java может использовать все приемы потоков, известные компилятору. Так что если вы хотите приложить усилия к Java, это будет по крайней мере так же быстро, как Scala. (Опять же, если вы пишете свой Scala как Java, очень мало случаев, когда Java будет быстрее, поэтому в основном это ничья.)

  2. Да, если вы предоставляете файл scala-library.jar (и любые другие, которые необходимы, например, если вы используете Swing, что было бы странно делать в массивно распараллеленной системе).

  3. Компиляция байт-кода Java почти никогда не происходит быстрее, чем запуск байт-кода в JVM. JVM умнее большинства статических компиляторов.

  4. Вы не спрашивали, но в Scala нет встроенной поддержки движка Sun Grid Engine. Например, вы могли бы что-то настроить с удаленными актерами, но у вас там была бы значительная работа.

3 голосов
/ 11 апреля 2011

1) Нет, вы не получите превосходную производительность.Ваша скорость как программиста будет выше, когда вы преодолеете кривую обучения, но это не ваш вопрос.

Возможно, будет проще распараллелить, используя актеров и будущего Scala или предстоящие 2.9 'параллельные коллекции.Кроме того, если в коде много общего, но часто используются примитивы в штучной упаковке, функция специализации Scala намного проще, чем делать эквивалент вручную в Java.

С другой стороны, существуют акторы и фьючерсы Akka, которыевозможно, превосходят их и могут прекрасно использоваться в Java, а собственные параллельные компоненты Java неплохие.

2) Да.

3) Ошибка, что?

...