Параллельное программирование на Java - PullRequest
0 голосов
/ 17 января 2011

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

Заранее спасибо за помощь

Bill

Ответы [ 5 ]

5 голосов
/ 17 января 2011

Я бы посоветовал вам попробовать встроенный ExecutorService для распределения нескольких задач по нескольким потокам / ядрам.Есть ли у вас какие-либо требования, которые вам могут не подойти?

2 голосов
/ 17 января 2011

Я ведущий разработчик Ateji PX . Как вы упоминаете, обеспечение безопасности потоков является важной темой. Это также очень сложный вопрос, и кроме рукописных и проверенных аннотаций @ThreadSafe нет особой помощи. Смотрите, например «Проблема с темами».

В настоящее время мы работаем над параллельным верификатором для Ateji PX. Это стало возможным благодаря тому, что параллелизм в Ateji PX является композиционным (в отличие от потоков) и основан на надежной математической основе, а именно пи-исчислении. Даже без инструмента опыт показывает, что выражение параллелизма в интуитивно понятной и композиционной форме значительно упрощает «параллельное мышление» и обнаружение ошибок ранее.

2 голосов
/ 17 января 2011

Утилита параллелизма Java:

http://download.oracle.com/javase/1.5.0/docs/guide/concurrency/overview.html

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

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

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

1 голос
/ 17 января 2011

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

Edit:

Также учтите, что когда придет время обслуживания, и вы не будетедля выполнения этого будет проще найти подрядчика, сотрудника или стажера, обладающего навыками стандартного многопоточного программирования на Java, чем в Ateji PX.

Последнее слово, есть бесплатная 30-дневная пробная версия, попробуйте.

0 голосов
/ 17 января 2011

Не волнуйтесь, Java 7 готовит Fork Join от Doug lea для распределенной обработки.

...