14

W jaki sposób program scala może tworzyć wielowątkowe programy łatwiej niż w języku Java? Co może scala zrobić (że java nie może), aby ułatwić korzystanie z wielu procesorów?Jakie zalety ma Scala nad Javą do programowania współbieżnego?

+4

Java może zrobić wszystko, co Scala może zrobić, i na odwrót. Obaj działają w JVM i oboje są Turing-complete, więc z definicji każdy może robić to samo, co drugi. Różnica jest tym, co łatwiejsze lub bardziej naturalne w jednym języku niż inne. – cHao

+0

@CHao @Zan edytowane pytanie, aby dokładniej rozwiązać problem. :) –

Odpowiedz

6

Istnieje nic. Scala robi, że Java nie. To byłoby głupie. Scala działa na tej samej maszynie JVM, którą ma Java.

Co Scala ma zrobić ułatwia pisanie, łatwiejsze rozumowanie i łatwiejsze do debugowania programu wielowątkowego.

Dobrym kawałkiem Scala dla współbieżności jest skupienie się na niezmiennych obiektach, przekazywaniu wiadomości i ich Aktorach.

Daje to bezpieczne dla wątków dane tylko do odczytu, łatwe przekazywanie tych danych do innych wątków i łatwe korzystanie z puli wątków.

+2

Dodałbym do niego zamknięcia. Naprawdę ułatwia to wiele rzeczy. –

+1

Dodałbym również, że rozdzielone granice naprawdę zmieniają pole gry do pisania współbieżnych programów. Mam nadzieję, że niesamowite wsparcie biblioteki pojawi się w ciągu kilku miesięcy. – jsuereth

13

Zasady współbieżności są

1 uniknąć, jeśli możesz

2 akcje nic jeśli można

3 akcje niezmienne obiekty jeżeli można

4 być bardzo ostrożny (a szczęście)

Dla reguły 2 Scala pomaga poprzez dostarczenie ładnie zintegrowanej wiadomości przekazującej bibliotekę po wyjęciu z pudełka w postaci aktorów.

Dla reguły 3 Scala pomaga w domyślnym ustawieniu wszystkiego jako niezmiennego.

Elastyczna składnia reguły 4 Scala pozwala na tworzenie wewnętrznych linii DSL, dzięki czemu łatwiej jest wyrazić to, czego potrzebujesz. czyli mniej miejsca na niespodzianki (jeśli zrobione dobrze)

+1

Myślę, że # 1 staje się coraz trudniejsze do zrobienia. Powiedziałbym, że za pomocą frameworka, np. map-reduce lub biblioteka typu fork-join, może pomóc w pisaniu programów współbieżnych bez poczucia współbieżności. – jsuereth

+0

Zgadzam się. Zdecydowanie opłaca się dokładnie zbadać twoje potrzeby i wybrać wzory współbieżności, które pasują do tych potrzeb. A następnie użyj debugowanej biblioteki/frameworka, które je implementuje. –

+1

# 1 Musi nadejść z listy; raczej powinniśmy aktywnie poszukiwać sposobów na wykorzystanie rdzeni wielu procesorów dostępnych na nowoczesnych komputerach. –

12

Jeśli weźmie Akka jako podstawa do jednoczesnego (i rozproszonego) computing, można argumentować, jedyną różnicą jest zwykle rzeczy, która odróżnia Scala z Java, ponieważ Akka ma zarówno Java i wiązań Scala dla wszystkich swoich obiektów.

Powiązane problemy