Параллелизм в Java - PullRequest
       7

Параллелизм в Java

4 голосов
/ 05 января 2011

Существует ли какая-либо библиотека, подобная Intel TBB в Java, которая поддерживает параллелизм.

Ответы [ 6 ]

8 голосов
/ 05 января 2011

Возможно, вы могли бы уточнить, что именно вы ищете

Intel® Threading Building Blocks (Intel TBB) предлагает богатый и полный подход к выражению параллелизма в программе на C ++. Это библиотека, которая помогает вам использовать преимущества многоядерного процессора без необходимости быть экспертом по многопоточности. Intel TBB - это не просто библиотека для замены потоков. Он представляет собой высокоуровневый параллелизм на основе задач, который абстрагирует детали платформы и механизмы потоков для масштабируемости и производительности.

Это то, что библиотеки параллелизма делают с 1998 года и стали частью Java 5.0 в 2004 году.

РЕДАКТИРОВАТЬ: скажем, вам нужен пул потоков, который может использовать все логические процессоры в вашей системе.

ExecutorService es = Executors.newFixedThreadPool(
      Runtime.getRuntime().availableProcessors);

// to add a number of tasks
for(int i=0; i<numberOfTasks; i++) {
   es.submit(new Callable<ResultType>() {
      public ResultType call() {
          return doWork(i);
      }
   }
}

Это выполнит doWork для каждого свободного потока.

Глядя на его особенности, они выглядят очень знакомыми.

Я рассмотрел некоторые оптимизации низкого уровня, такие как распределение памяти с учетом потоков. В Java это называется TLAB (Thread Local Allocation Buffers) и является прозрачным. Я подозреваю, что большинство разработчиков Java даже не знают, что они существуют.

Результаты и исключения собраны для вас в объекте Future, который вы сможете просмотреть позже.

Вы можете иметь «переменные условия», такие как CountdownLatch или CyclicBarrier

Новый контейнер, имитирующий C ++ 0x unordered_map и основанный на совместной спецификации, реализованной как Intel (TBB 3.0), так и Microsoft (Visual Studio 2010). Он имеет три преимущества перед предыдущим файлом concurrent_hash_map:

  • Интерфейс, очень похожий на C ++ 0x unordered_map
  • Разрешает одновременную вставку и обход.
  • Интерфейс не блокируется. Реализация может использовать блокировки внутри, но блокировка никогда не открывается таким образом, который может способствовать взаимоблокировке. Он может удерживать блокировки внутри, но никогда при вызове пользовательского кода.

Java ConcurrentHashMap поддерживает интерфейсы ConcurrentMap и Map, разрешает одновременную вставку и обход и не предоставляет никаких блокировок. ;) Ему не менее 9 лет, так что вы знаете, что он должен быть надежным и стабильным.

Существует PriorityQueue, который вы можете использовать в своем пуле потоков, если хотите.

6 голосов
/ 05 января 2011

есть хорошая книга по этой теме:

Java Concurrency in Practice

Java Concurrency in Practice

4 голосов
/ 05 января 2011

Доступен в пакете java.util.concurrent, начиная с Java5.

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

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

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

0 голосов
/ 29 сентября 2011

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

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

Проверьте пакет java.util.concurrent.У него есть целая куча классов, которые полезны для параллельного программирования.

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

...