Поведение потока в нескольких процессорах

В Java-программе планировщик потоков быстро переключается между потоками, поэтому мы чувствуем, что многие задачи выполняются одновременно, хотя на самом деле это не так.

Однако, если наши компьютеры имеют несколько центральных процессоров (ЦП), будет ли это означать, что потоки фактически обрабатываются параллельно без вышеупомянутого переключения?

Обоснование возможного дублирующего предложения: я спрашиваю, может ли программа Java использовать несколько ядер, в отличие от этого вопроса «как JVM использует несколько ядер?»


person Ran_Macavity    schedule 08.09.2017    source источник
comment
да. Потоки могут выполняться одновременно, работая на разных ядрах.   -  person JB Nizet    schedule 08.09.2017
comment
Когда базовая операционная система использует аппаратные потоки, тогда JVM и любые Java-приложения внутри JVM могут работать параллельно. Ваше предположение, что это даже сомнительно... читается так, будто ваши знания устарели лет на 10.   -  person GhostCat    schedule 08.09.2017
comment
Извините за публикацию этого, но не мог не опубликовать. Правда, это может быть дубликатом другого вопроса, но многие хорошие вопросы получают отрицательные отзывы по многим причинам. Большинство людей здесь являются экспертами в своей соответствующей области технологий, но все должны понимать, что не все из нас такие. Будучи новичком в технологии (в моем случае java), мы могли бы задать некоторые вопросы, основанные на мнении, и, по моему мнению, это не должно обескураживать отрицательным голосованием. Я понимаю, что это плохой вопрос, и не имею ничего против отрицательного ответа на такой вопрос. просьба терпеть и нас новичков.   -  person Ran_Macavity    schedule 08.09.2017
comment
Голоса — это обратная связь. Видите ли, большинство людей не понимают, что они должны провести серьезное исследование, прежде чем задавать вопрос. Я не вижу здесь большого количества доказательств предшествующих исследований.   -  person GhostCat    schedule 08.09.2017
comment
@GhostCat согласен с вашей точкой зрения, но я провел небольшое исследование, прежде чем публиковать здесь. В нескольких местах, которые я посетил, были некоторые противоречивые факты о том, может ли программа использовать несколько ядер или нет. Поэтому я опубликовал, чтобы получить окончательный ответ. Моя вина, что я не провел более тщательный поиск на этом сайте. Спасибо за ответ и ответ: )   -  person Ran_Macavity    schedule 08.09.2017
comment
И просто для протокола: большинство современных процессоров аппаратно поддерживают несколько потоков. Таким образом, даже один ЦП может обеспечить настоящий параллелизм.   -  person GhostCat    schedule 09.09.2017
comment
Я не понимаю разницы, которую вы пытаетесь провести. В чем разница между программой, использующей несколько ядер, и виртуальной машиной, использующей несколько ядер?   -  person Kevin Krumwiede    schedule 09.09.2017
comment
@KevinKrumwiede Я все еще изучаю Java, поэтому я спросил об этом. Я действительно не понимаю, о чем вы спрашиваете? Разве это не то же самое во время выполнения программы Java? (программа и ВМ)   -  person Ran_Macavity    schedule 10.09.2017
comment
Вы спросили, как программа Java использует несколько ядер, в отличие от того, как виртуальная машина использует несколько ядер. Я не понимаю различия.   -  person Kevin Krumwiede    schedule 11.09.2017
comment
@KevinKrumwiede Последний абзац был моим обоснованием, поскольку он был помечен как повторяющийся вопрос. Мой первоначальный вопрос не касался содержания выше этого абзаца.   -  person Ran_Macavity    schedule 11.09.2017


Ответы (1)


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

person CodeBlind    schedule 08.09.2017