Java и многоядерные

1

Я где-то где-то читал, что у нас должна быть одна JVM на ядро. Я также читал, что Java не хорош с несколькими ядрами или процессорами, поэтому предпочтение отдается scala.

Недавно по ссылке я прочитал, что несколько потоков выполняются в разных ядрах, если они доступны.

Вопросов:

  1. использует ли JVM несколько ядер/процессоров и выполняет каждый поток в отдельном ядре, если он доступен?
  2. использование scala для лучшего использования ядер несколько отличается от того, что просто выполнение в отдельном ядре?
  3. если JVM выполняет каждый поток в отдельном ядре (если есть), что означает один JVM на ядро, с одним JVM я могу использовать все ядра.
  4. если ответ на вопрос 1 да, то зачем использовать развертывание войны/уха в нескольких экземплярах сервера, работающих на одном компьютере.
  • 1
    Я не совсем понимаю ... JVM перенаправляет все вызовы на родную ОС . Как многоядерность / Одножильный непосредственно имеет значение для него?
  • 0
    @TheLostMind - это имеет значение. В Python GIL предотвращает одновременное использование нескольких ядер, даже если он может выполняться на любом отдельном ядре в данный момент времени, поэтому этот вопрос актуален.
Показать ещё 2 комментария
Теги:
multithreading
jvm

1 ответ

4
Лучший ответ
  1. Да. На самом деле, все JVM, в наши дни, используют собственные потоки. Таким образом, планирование и распределение потоков по ядрам выполняется ОС, а не JVM.

  2. Scala выполняется на JVM, как Java. Таким образом, нет никакой разницы в том, как потоки используют ядра между Java и Scala

  3. Нет причин иметь одну JVM на ядро. Вы можете захотеть этого, чтобы избежать использования двух больших объемов памяти на JVM или иметь возможность перейти на версию 1 до версии 2 без прерывания обслуживания, но это другое дело.

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

  • 0
    Вы хотите сказать, что JVM может напрямую решать, как выполнять потоки ?
  • 0
    Нет, совсем наоборот. Планирование потоков выполняется ОС.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню