Возможно, вы могли бы уточнить, что именно вы ищете
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, который вы можете использовать в своем пуле потоков, если хотите.