4

Есть ли в библиотеке библиотека, подобная Intel TBB, которая поддерживает параллелизм.Параллелизм в Java

+2

FYI: вы можете принять ответы, нажав на галочку по каждому из ваших вопросов. – jzd

ответ

8

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

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

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

EDIT: Допустим, вы хотите пул потоков, которые могут использовать все логические процессоры в вашей системе.

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 (потоковые локальные буферы распределения) и прозрачно. Я подозреваю, что большинство разработчиков Java даже не знают, что они существуют.

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

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

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

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

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

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

+0

Да, я ищу преимущества многоядерных процессоров и многопроцессорных приложений. – Kamahire

+1

+1 для проверки Intel TBB. По внешнему виду это очень напоминает структуру java.util.concurrent, которая абстрагирует детали нижнего уровня потоков, wait/notify и т. Д. И позволяет нам работать с более высокими уровнями, такими как [Исполнитель] (http: //download.oracle.com/javase/6/docs/api/java/util/concurrent/Executor.html)s, очереди заданий и ['Callable'] (http://download.oracle.com/javase/6 /docs/api/java/util/concurrent/Callable.html)s. –

+1

Я сомневаюсь, что это то же самое, однако его объект, на мой взгляд, тот же, что и его использование вместо TBB. –

4

Он доступен в пакете java.util.concurrent, так как Java5.

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

+0

Я считаю, что параллелизм отличается от параллизма. Просьба пройти через библиотеку Intel TBB – Kamahire

+2

Возможно, вы можете уточнить, какую разницу вы ищете? –

0

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

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

6

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

Java Concurrency in Practice 

Java Concurrency in Practice

+1

Я считаю, что параллелизм отличается от параллизма. Просьба пройти через библиотеку Intel TBB – Kamahire

+1

+1, хотя это не прямой ответ на вопрос, книга абсолютно рекомендована, и она подробно объясняет, как использовать конструкции параллелизма, сделанные в Java5/6. –

1

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

0

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

+1

Это совсем не ответ на вопрос. –

Смежные вопросы