Python противJava — Что бы вы выбрали для параллельного программирования и почему?[закрыто]

StackOverflow https://stackoverflow.com/questions/1861457

Вопрос

Кроме того, если не python или java, то вы бы в более общем плане выбрали язык со статической типизацией или язык с динамическим типом?

Это было полезно?

Решение

Я бы выбрал JVM вместо python, в первую очередь потому, что многопоточность в Python затруднена Глобальная Блокировка интерпретатора.Однако Java вряд ли будет вашей лучшей при работе на JVM. Клоджур или Скала (используя актеров), оба, вероятно, лучше подходят для многопоточных задач.

Если вы все-таки выберете Java, вам следует рассмотреть возможность использования java.util.параллельный библиотек и избегать многопоточных примитивов, таких как синхронизированный.

Другие советы

Определенно Питон без стека!Это вариант Python, специально созданный для параллелизма.

Но в конце концов это зависит от вашей целевой платформы и того, чего вы пытаетесь достичь.

Для параллелизма я бы использовал Java.Под использованием Java я на самом деле подразумеваю Скала, который многое заимствует из конструкций параллелизма Erlang, но (вероятно) более доступен для разработчика Java, который никогда раньше не использовал ни то, ни другое.

Потоки Python страдают от необходимости ждать глобальной блокировки интерпретатора, что делает настоящий параллелизм (в рамках одного процесса) недостижимым для программ, привязанных к процессору.Насколько я понимаю, Stackless Python решает некоторые (хотя и не все) недостатки параллелизма CPython, но поскольку я им не пользовался, я не могу ничего посоветовать по этому поводу.

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

Почему бы не взглянуть на Эрланг (который имеет динамическую типизацию) и передача сообщений, тот Модель актера, и прочитайте , почему Джо Армстронгу не нравится разделяемая память.Там также есть интересная дискуссия о параллелизме Java с использованием блокировок и потоков вот на ТАКОМ.

Я не знаю о Python, но Java, наряду со встроенной моделью блокировок и потоков, имеет среду передачи mesasge, называемую Килим.

Если бы не Java / Python, я бы выбрал функциональный язык поскольку учет побочных эффектов является одной из сложностей написания параллельного программного обеспечения.(Что касается вашего вопроса :этот вариант имеет статическую типизацию, но большую часть времени компилятор делает вывод)

Лично я бы выбрал F #, так как я видел много хороших примеров написания параллельного программного обеспечения с легкостью его использования.

В качестве введения :этот человек - одинаково весело и вдохновляюще, даже, должно быть, видели, если вы не заинтересованы в F #, что так когда-либо.

Я бы использовал Java, через Jython.Java обладает мощными потоковыми возможностями, и она может быть написана с использованием синтаксиса Python с помощью Jython, так что вы получили лучшее из двух миров.

Сам Python не очень хорош в параллелизме и в любом случае работает медленнее, чем Java.

Но если у вас есть проблемы с параллелизмом и свободные руки, я бы взглянул на Erlang, потому что он был разработан для таких задач.Конечно, вы должны рассматривать Erlang только в том случае, если у вас есть:

  • время освоить (очень) новую технологию
  • контролируйте разумную часть производственной цепочки, поскольку Erland нуждается в некоторой адаптации в вашем наборе инструментов, чтобы соответствовать

Ни то, ни другое.Параллельное программирование, как известно, трудно корректировать.Существует возможность использования процессно-ориентированного языка программирования, такого как оккам-пи который основан на идее передача информации о последовательных процессах и тот исчисление числа пи.Это позволяет во время компиляции проверять наличие взаимоблокировки и многих других проблем, возникающих при разработке параллельных систем.Если вам не нравится occam-pi, в чем я не могу вас винить, если вам это не нравится, вы могли бы попробовать Вперед новый язык от Google, который также реализует версию CSP.

Для некоторых задач Python работает слишком медленно.Ваша однопоточная Java-программа может быть быстрее, чем параллельная версия Python на многоядерном компьютере...

Я бы хотел использовать Java или Scala, F # или просто перейти на C ++ (MPI и OpenMPI).

Среда Java (JVM + библиотеки) лучше подходит для параллелизма, чем (C) Python, но Java - язык отстой.Я бы, вероятно, выбрал другой язык для JVM - Jython уже упоминался, а Clojure и Scala имеют отличную поддержку параллелизма.

Clojure особенно хорош - он поддерживает высокопроизводительные постоянные структуры данных, агентов и программную транзакционную память.Это динамический язык, но вы можете дать ему подсказки по типу, чтобы получить производительность не хуже Java.

Смотреть это видео на InfoQ Ричард Хики (создатель Clojure) рассказывает о проблемах с традиционными подходами к параллелизму и о том, как Clojure справляется с этим.

Я бы посмотрел на Objective-C и Foundation Framework.Асинхронное, параллельное программирование хорошо предусмотрено.

Это, конечно, зависит от вашего доступа к инструментам разработчика Apple или GNUstep, но если у вас есть доступ к любому из них, это хороший способ использовать параллельное программирование.

Ответ заключается в том, что это зависит.Например, пытаетесь ли вы воспользоваться преимуществами нескольких ядер или процессоров на одной машине или хотите распределить свою задачу по многим машинам?Насколько важна скорость по сравнениюпростота внедрения?

Как упоминалось ранее, Python имеет глобальную блокировку интерпретатора, но вы могли бы использовать многопроцессорная обработка модуль.Обратите внимание, что в то время как Без штабелей это очень круто, это не будет использовать несколько ядер само по себе.Обычно считается, что с Python работать проще, чем с Java.Если скорость является приоритетом, Java обычно работает быстрее.

В java.util.concurrent библиотека на Java упрощает написание параллельных приложений на одном компьютере, но вам все равно потребуется синхронизировать их с любым общим состоянием.Хотя Java не обязательно является лучшим языком для параллелизма, существует множество инструментов, библиотек, документации и лучших практик, которые могут помочь.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top