Java имеет поддержку многоядерных процессоров/параллельной обработки?

Я знаю, что теперь, когда большинство процессоров имеет два или больше ядра, многоядерное программирование является всем гневом. Там функциональность состоит в том, чтобы использовать это в Java? Я знаю, что Java имеет класс Потока, но я также знаю, что это было около долгого времени, прежде чем мультиядра стали популярными. Если бы я могу использовать несколько ядер в Java, какой класс/технику я использовал бы?

36
задан Rafe Kettler 25 July 2010 в 18:22
поделиться

4 ответа

Есть ли в Java поддержка многоядерных процессоров/параллельной обработки?

Да. Она также была платформой для других языков программирования, где реализация добавляла "истинную многопоточность" или "реальную многопоточность". Сборщик мусора G1, представленный в новых выпусках, также использует многоядерное оборудование.

Java Concurrency in Practice

Попробуйте достать копию книги Java Concurrency in Practice .


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

java.util.concurrent

Утилитарные классы, обычно полезные в concurrent programming. Этот пакет включает в себя несколько небольших стандартизированных расширяемых фреймворков, а также несколько классы, которые обеспечивают полезную функциональность, но в противном случае нудными или сложными для реализации. Ниже приведены краткие описания основных компонентов.

Исполнители

Executor - простой стандартизированный интерфейс для определения пользовательских потокоподобных подсистем, включая пулы потоков, асинхронный ввод-вывод и легковесные каркасы задач.

Очереди

Класс java.util.concurrent ConcurrentLinkedQueue предоставляет эффективную масштабируемую потокобезопасную неблокирующую очередь FIFO.

Timing

Класс TimeUnit предоставляет множество гранулярностей (включая наносекунды) для задания и контроля операций, основанных на тайм-ауте. Большинство классов в пакете содержат операции, основанные на тайм-аутах в дополнение к неограниченному ожиданию.

Синхронизаторы

Четыре класса помогают распространенным идиомам синхронизации специального назначения. Semaphore - классический инструмент параллелизма. CountDownLatch - очень простая, но очень распространенная утилита для блокировки до тех пор, пока не произойдет заданное количество сигналов, событий или условий. [...]

Concurrent Collections

Помимо очередей, этот пакет предоставляет несколько реализаций коллекций, предназначенных для использования в многопоточных контекстах: ConcurrentHashMap, CopyOnWriteArrayList, and CopyOnWriteArraySet.


Это также пригодится, если вы хотите сопоставить количество потоков с количеством доступных процессоров, например:

int n = Runtime.getRuntime().availableProcessors();
42
ответ дан 27 November 2019 в 05:57
поделиться

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

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

9
ответ дан 27 November 2019 в 05:57
поделиться

В Java 5 представлен пакет java.util.concurrent, который помогает создавать параллельные приложения, которые могут извлечь выгоду из многоядерных систем. Этот пакет выходит далеко за рамки функций многопоточности, предлагаемых в Java 1.4 и ранее (например, синхронизация, ожидание, уведомление и т. Д.).

Для Java 7 предлагается включить фреймворк Fork / Join , чтобы упростить использование многоядерных систем.

7
ответ дан 27 November 2019 в 05:57
поделиться

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

Параллелизм, представленный таким образом на уровне языка, в отличие от библиотек потоков, которые предоставляют API-доступ к концепции в основном на аппаратном уровне, делает многоядерное программирование намного более простым и интуитивно понятным.

Это радикально новый подход к параллельному программированию, о котором стоит прочитать (отказ от ответственности: я разработчик Ateji PX). Технический документ находится здесь: http://www.ateji.com/px/whitepapers/Ateji%20PX%20for%20Java%20v1.0.pdf .

2
ответ дан 27 November 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: