14

Как scala может создавать многопоточные программы проще, чем в java? Что может сделать scala (что java не может), чтобы облегчить использование нескольких процессоров?Какие преимущества у Scala для Java для параллельного программирования?

+4

Java может делать все, что может сделать Scala, и наоборот. Они оба работают в JVM, и они оба завершают Turing, поэтому по определению либо можно делать то же самое, что и другое. Разница в том, что проще или более естественно на одном языке, чем на другом. – cHao

+0

@cHao @Zan отредактировал вопрос, чтобы более внимательно рассмотреть проблему. :) –

ответ

6

ничего Scala делает то, что Java не делает. Это было бы глупо. Scala работает на той же JVM, что и в Java.

Что делает Scala Это облегчает запись, проще рассуждать и проще отлаживать многопоточную программу.

Хорошие битки для параллелизма - это сосредоточение внимания на непреложных объектах, передаче сообщений и их Актерах.

Это дает потокобезопасные данные только для чтения, простые способы передачи этих данных другим потокам и простое использование пула потоков.

+2

Я бы добавил к нему закрытие. Это действительно облегчает многое. –

+1

Я бы добавил, что разграниченные продолжения действительно меняют игровое поле для написания параллельных программ. Надеюсь, удивительная поддержка библиотеки появится через несколько месяцев. – jsuereth

13

Правила параллельности являются

1 избежать, если вы можете

2 Доля ничего, если вы можете

3 доли неизменные объекты, если вы можете

4 быть очень осторожным (и lucky)

Для правила 2 Scala помогает, предоставляя красиво интегрированную библиотеку передачи сообщений из коробки в форме актеров.

Для правила 3 ​​Скала помогает сделать все неизменным по умолчанию.

Для правила 4 Гибкий синтаксис Scala позволяет создавать внутренние DSL, что делает его проще и менее многословным, чтобы выразить то, что вам нужно. т. е. меньше места для сюрпризов (если все сделано хорошо)

+1

Я думаю, что № 1 все труднее делать. Я бы сказал, что с использованием фреймворка, например. map-reduce или некоторая библиотека fork-join, может помочь вам писать параллельные программы, не испытывая при этом одновременной работы. – jsuereth

+0

Согласен. Это определенно требует тщательного изучения ваших потребностей и выбора шаблонов параллелизма, которые соответствуют этим требованиям. А затем используйте отлаженную библиотеку/фреймворк, которые их реализуют. –

+1

# 1 Нужно прийти из списка; скорее мы должны активно искать способы использования множества ядер процессора, доступных на современных компьютерах. –

12

Если вы берете Akka в качестве основы для параллельных (и распределенных) вычислений, можно утверждать, что единственное различие - это обычный материал, который отличает Scala от Java, поскольку Akka имеет как Java и привязки Scala для всех своих объектов.