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