2015-01-18 1 views
-2

У меня вопрос о многопоточности в Java с многоядерным процессором. Как я знаю, когда был один основной процессор, многопоточность работала, так как каждый поток получал кусочек времени процессора для запуска, теперь у нас есть многоядерный процессор, как я предполагал, JVM также будет обновляться, чтобы получить это преимущество, не так ли ? Или это не так, и именно по этой причине fork/join framework был введен в Java 7 для многопроцессорной обработки? спасибо.Многопоточность в Java с многоядерным процессором

+4

JVM поддерживает многопоточность со своей первой версии. Fork/Join - это специализированный способ разбить проблему. Я изо всех сил пытаюсь понять, каков ваш реальный вопрос? – tddmonkey

+0

Какой JVM? Я уверен, что большинство реализаций JVM будут использовать несколько ядер при выполнении многопоточного кода. Но это зависит от реализации. Fork/Join framework - библиотека более высокого уровня, которая использует java.lang.Thread. – Phil

+0

Я уверен, что идея о том, какое физическое ядро ​​работает в потоке, отвлечена самой операционной системой. Поэтому, если ваш язык поддерживает потоки вообще, то он будет поддерживать текущие потоки на нескольких ядрах, потому что он не знает –

ответ

1

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

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

Если у вас есть одна нить, и вы хотите создать больше, чтобы каждый из них мог выполнять часть работы, то позже вам придется присоединиться к результатам из них. Выполнение этого forking (данных от одного до многих потоков) и объединение (из данных из многих потоков в один) сложнее, чем кажется сначала, и помочь с ним - причина, по которой fork/join был введен в Java 7.

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