Java v Scala с точки зрения параллелизма - PullRequest
3 голосов
/ 17 марта 2011

Я начинаю свой последний годовой проект прямо сейчас. Я собираюсь исследовать параллельные подходы с точки зрения Java и Scala. Выйдя из java-модуля параллелизма, я могу понять, почему люди говорят, что подход к созданию потоков в общем состоянии трудно рассуждать. У вас есть критические разделы, о которых нужно беспокоиться, риск гоночных состояний, взаимных блокировок и т. Д. Из-за недетерминированного способа работы потоков Java. В версии 1.5 этому рассуждению была дана некоторая ясность, но, тем не менее, он далек от кристально чистого.

На первый взгляд, кажется, что scala удаляет эти сложные рассуждения через класс актеров. Это дало программисту возможность разрабатывать параллельные системы с более последовательной точки зрения и облегчить концептуализацию. Но правильно ли это, говоря о том, что есть некоторые недостатки? Например, скажем, мы хотим отсортировать большой список в обоих сценариях - с помощью Java вы создаете два потока, разбивает список на два, заботитесь о критических разделах, атомарных действиях и т. Д. И переходите к коду. В scala, поскольку это «ничего не поделится», вам действительно нужно передать list / 2 двум акторам, чтобы выполнить операцию сортировки, верно?

Полагаю, мой вопрос в том, что цена, которую вы платите за более простые рассуждения, - это издержки производительности, связанные с необходимостью передавать коллекцию вашим актерам в scala?

Я думал о том, чтобы провести несколько тестов производительности для этого эффекта (сортировка выбора, быстрая сортировка и т. Д.), Но поскольку один из них функционален, а другой обязателен - я не буду сравнивать яблоки с яблоками с точки зрения алгоритма.

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

Ответы [ 2 ]

4 голосов
/ 17 марта 2011

Приятной особенностью Scala является то, что вы можете выполнять параллелизм Java, если хотите.Все классы Java доступны.

Таким образом, все сводится к разнице между моделью, в которой у вас есть потоки с параллельным доступом к изменяемым переменным, и моделью, в которой у вас есть субъекты с состоянием, которые отправляют сообщения друг другу, ноне заглядывайте во внутренние органы друг друга.И вы абсолютно правы в том, что в некоторых сценариях вам приходится уступать в производительности, а не в простоте получения правильного кода.

Обычно я считаю грубым практическим правилом, что если у вас будет кучапотоки тратят значительное количество времени в ожидании открытия блокировки, используя модель Java, и нет никакого чистого способа разделить работу, чтобы избежать того, чтобы все ждали этого ресурса, и если выполнение переключается между потоками быстро, тогдаМодель Java намного превосходит модель актера, где актер отправляет сообщение «Я закончил» супервизору, который затем отправляет «Вот новая работа!»сообщение для существующего незанятого актера.Алгоритмы сортировки, в зависимости от того, как вы их себе представляете, могут очень сильно попасть в эту категорию.

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

3 голосов
/ 17 марта 2011

Я просто укажу здесь, что Scala не копирует аргументы, переданные актерам, поэтому актеры могут делиться тем, что им передано.

В отличие от Эрланга, программист обязан избегать совместного использования изменяемого материала. Тем не менее, нет никакого наказания в обмене неизменным материалом, так как нет необходимости блокировать его, так как все доступы к нему только для чтения. И Scala имеет сильную поддержку неизменных структур данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...