Как часто мы должны использовать фьючерсов и актеров? Есть альтернативы?

Вопрос задан: 10 месяцев назад Последняя активность: 10 месяцев назад
up 0 down

Я решил создать физический движок с помощью scala, используя параллелизм. Я знаю, что для большого числа вычислений можно распараллелить (что важно для оптимизации вещей).

Однако я знаю, что абстракции параллелизма с использованием актеров или фьючерсов идут с большим количеством накладных расходов. Как часто я должен использовать фьючерсы и актеров? Я хотел бы сделать каждое числовое утверждение (например, factorial(4) или же gcd(5,10)) будущее может сделать вещи более неэффективными, поскольку теперь вы платите за эти накладные расходы на нескольких уровнях и довольно часто.

Может быть, есть лучшие способы распараллеливания выполнения на более низком уровне в Scala? Что вы думаете о частоте использования фьючерсов и актеров?

1 ответ

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Реклама

up 3 down

Я думаю, что стоит различать истинный параллелизм и более широкий параллелизм.

Параллелизм - это способ ускорить выполнение кода, выполняя несколько вычислений одновременно. Это может варьироваться от SIMD-инструкций на процессоре до распределенных приложений на нескольких серверах. Выбор параллелизма будет зависеть от характера проблемы.

Параллелизм - это способ реализации разделение интересов путем разделения кода на различные разделы, которые выполняются одновременно. Основная цель - позволить приложению манипулировать несколькими задачами, даже если оно выполняется в одном потоке.

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

Scala на самом деле не поддерживает инструкции SIMD (возможно, из-за основ JVM), но есть библиотеки для ускорения GPU, на которые вы обязательно должны обратить внимание, если выполняете тяжелые вычисления.

Простой параллелизм на уровне задач может быть реализован с помощью классов параллельной коллекции в Scala, которые потенциально могут эффективно использовать несколько потоков.

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

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

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